好的我正在尝试做两件事:
1-产生预制件后,它不应再次产生
2-生成点用于预制后,不应再次使用(因此两个对象不会在同一位置生成)
一直试图用列表来做这件事。我遇到的问题是在while循环中删除列表中的正确项目,这似乎是有问题的。所有对象都在同一个生成点产生,我不知道为什么。
这是我的代码:
public List<GameObject> myList = new List<GameObject>();
public List<GameObject> spawnPoint = new List<GameObject>();
void Start () {
Debug.Log ("Total objects to spawn now is " + myList.Count);
if(myList.Count == 0){
Debug.Log ("No Objects to spawn");
} else {
if(spawnPoint.Count ==0)
{
Debug.Log ("No more spawn points");
} else {
while (myList.Count > 0) {
GameObject itemToSpawn = myList [Random.Range (0, myList.Count)];
GameObject spawns = spawnPoint [Random.Range (0, spawnPoint.Count)];
Vector3 position = GameObject.FindGameObjectWithTag ("replace").transform.position;
GameObject myItem = Instantiate (itemToSpawn, position, Quaternion.identity) as GameObject;
myList.Remove (itemToSpawn);
Debug.Log ("Total item now is " + myList.Count);
spawnPoint.Remove (spawns);
Debug.Log ("Total spawn points now is " + spawnPoint.Count);
DestroyObject (GameObject.FindGameObjectWithTag ("replace"));
}
}
}
}
}
答案 0 :(得分:0)
潜在的问题是你没有使用列表中的不同生成点作为新myItem
GameObject的输入转换。您继续使用标记为"replace"
的游戏对象的位置,但循环中没有任何内容会改变游戏对象的位置。我假设该列表中的对象包含"replace"
标记,但您实际上从未在场景中添加或删除任何对象,因此使用该标记找到的任何对象都将保持不变。您在spawnPoint
列表中获取了对变量的引用,但在从列表中删除之前,您从未对其执行任何操作。您可能想要进行设置,以便您可以执行以下操作:
Vector3 position = spawns.GetComponent<Transform>().position;
我同意High的观点,你应该切换到Stack或Queue,但无论你迭代什么,都要确保你获得了你认为的信息。