你如何销毁一个统一的GameObject并同时从列表中移除?



我有一个游戏对象列表,这可以跟踪我在游戏中拥有的怪物。当怪物被杀死时,它将位于列表的第0位。我想销毁场景中的对象并将其从列表中删除。

我的问题是,命令:list.RemoveAt(0);调用对象来销毁它,还是让它作为某种内存泄漏而存在?

我试过移除怪物,摧毁然后移除,将怪物保存到一个变量,然后移除然后摧毁,所有这些都会导致bug。如果我知道这个命令是如何工作的,我就可以把问题缩小到这个或我代码中的其他东西。

如果你将列表设置为公共变量,你可以在Unity检查器中看到它。当你摧毁一个怪物,你会看到列表改变,怪物设置为空。我会在摧毁怪物前将其从列表中移除。你可以在怪物上调用OnDestroy方法,在怪物被销毁之前将其从列表中移除。这将使用列表的Remove函数而不是RemoveAt。

不,从列表中删除它不会破坏它。list. remove()不会销毁游戏对象——它只是你的个人列表。你需要调用GameObject.Destroy(list[index]);然后你可以使用list。removeat (index);把它从你的列表中删除。然而,如果我们谈论的列表不是GameObjects,它是你自己的普通Class(),那么你就不需要担心内存分配,因为有一种叫做垃圾收集的东西,一旦没有人再对对象有活动引用,. net将释放对象的内存。

…我的工作是使用一个for next循环和一个布尔标志来完成这项工作。

do
{
StillWorking = false;
for (t = 0; t < BossObjects.Count; t++)
{
if (BossObjects[t].FlaggedForDeletion)
{
Destroy(BossObjects[t].WholeBossBoxGO);  // Delete the Gameobject
BossObjects.Remove(BossObjects[t]);      // Delete the List item 
StillWorking = true;                     // Flag we need another iteration
break;   // Needed because we changed the list count 
}
}
}
while (StillWorking); 

最新更新