c# - Creating a List of Unity Objects -
i'm trying create strip of sprites. created list of game objects , seems work ok. except have duplicate object in game view, seemed need destroy "template object". when looks fine, when try move them says i'm trying access object has been destroyed. can explain issue? seems i'm confused on instantiate , how works exactly. under impression object isn't created in game view until instantiate. why duplicate object? input.
using unityengine; using system.collections; using system.collections.generic; public class reelstrip : monobehaviour { public list <sprite> image = new list<sprite>(); public list <int> index = new list<int>(); public list <gameobject> symbol = new list<gameobject> (); public int reelnumber; public float symbolheight = 1.74f; public float symbolwidth = 2.00f; public float speed = 0.01f; // use initialization void start () { reelnumber = 0; loadstrip (new list<int>{0,0,1,2,4,1,4,5}); } void addsymbol(int indextoadd) { string name = "reelnum: " + reelnumber + " index " + indextoadd; spriterenderer renderer = new spriterenderer (); gameobject symbolobject = new gameobject (name); symbolobject.addcomponent<spriterenderer> (); renderer = symbolobject.getcomponent<spriterenderer> (); symbolobject.addcomponent<symbol> (); sprite loadedsprite = resources.load <sprite>(symbolnameatindex(indextoadd)) sprite; renderer.sprite = loadedsprite; symbol.add (symbolobject); vector3 newpos; if(symbol.count<2) { newpos = new vector3(0.0f,0.0f,0.0f); } else{ newpos = new vector3(symbol[symbol.count-1].transform.position.x,symbol[symbol.count-1].transform.position.y + symbolheight, 0.0f); } instantiate (symbol[symbol.count-1], newpos, quaternion.identity); // destroy template object ///// confused on destroy ////// //destroy (symbolobject); } public void movestripdown(float delta) { (int i=0;i<symbol.count;i++) { symbol[i].transform.position = new vector3(symbol[i].transform.position.x,symbol[i].transform.position.y - delta, symbol[i].transform.position.z); } } public void loadstrip(list <int> indexes) { (int i=0;i<indexes.count;i++) { addsymbol (indexes[i]); } } public string symbolnameatindex(int index) { string returnstring; switch (index) { case 0: returnstring = "img1"; break; case 1: returnstring = "img2"; break; case 2: returnstring = "img3"; break; case 3: returnstring = "img4"; break; case 4: returnstring = "img5"; break; default: returnstring = "symbolnotfound"; break; } return returnstring; } // update called once per frame void update () { movestripdown (speed*time.deltatime); } }
since have added symbolobject list , later destroy same symbolobject, added object no longer exists when try move (although reference stays in list).
gameobject():gameobject creates new gameobject in hierarchy , instantiate(original:object):object clones object. when gameobject created or cloned, appear in hierarchy.
to code working, add instantiated object list , destroy game object.
symbol.add (instantiate (symbol[symbol.count-1], newpos, quaternion.identity)); destroy (symbolobject);
an alternative skip instantiate step since create new game object every time.
however, recommend keep game object prefab , load resource folder , use instantiate on said object. read folloiwng link how use resources load folder (2nd example shows how use instantiate this) http://docs.unity3d.com/scriptreference/resources.load.html
Comments
Post a Comment