我最近开始创建一个游戏,但当我试图破坏场景中的对象时,它们也会从列表中删除。这是代码:
List<GameObject> objects = new List<GameObject>();
int x = 650;
// Here I try to destroy objects
foreach(Transform obj in transform) {
Destroy(obj.gameObject);
}
// Here I instantiate all objects from the array
for(int i = 0;i < objects.Count;i++) {
if(objects.Count == 3) {
GameObject prefab_copy = (GameObject)Instantiate(objects[i], new Vector2(x, 1150), Quaternion.identity );
prefab_copy.GetComponent<Image>().enabled = true;
prefab_copy.transform.SetParent(parentobj.transform);
x = x + 100;
}
}
cleanItemList = true;
在列表中保留null值,然后尝试从中实例化是危险的,请在销毁游戏对象后立即从列表中删除。在游戏模式下,无法保留对已删除游戏对象的引用。
我的建议是制作一个辅助方法,可以在场景中找到新的引用,并随时将其添加到列表中,或者制作你想要的游戏对象的预制,并根据要求填充列表,并根据需要删除。就我所能理解的问题而言,你需要学习对象池。它将帮助您重用相同的对象并提高性能。