【发布时间】:2016-03-07 02:24:31
【问题描述】:
我正在尝试创建一条精灵。我创建了一个游戏对象列表,它似乎工作正常。除了我在游戏视图中有一个重复的对象,所以看起来我需要销毁我的“模板对象”。当我这样做时,它看起来不错,但是当我尝试移动它们时,它说我正在尝试访问已被破坏的对象。有人可以帮助解释我的问题吗?看来我对 Instantiate 以及它是如何工作的感到困惑。我的印象是直到实例化才在游戏视图中创建对象。但是为什么我会得到一个重复的对象呢?感谢您的意见。
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 this for 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)) as 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 the destroy //////
//Destroy (symbolObject);
}
public void moveStripDown(float delta)
{
for (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)
{
for (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 is called once per frame
void Update () {
moveStripDown (speed*Time.deltaTime);
}
}
【问题讨论】:
标签: c# list unity3d gameobject