do
{
for (t = 0; t < BossObjects.Count; t++)
{
StillWorking = false;
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);
3条答案
按热度按时间lxkprmvk1#
如果你将列表设为公共变量,你可以在Unity检查器中看到它。当你摧毁一个怪物时,你会看到列表更改为将怪物设置为空。我会在摧毁之前从列表中移除怪物。你可以在怪物上调用OnDestroy方法,在怪物被摧毁之前从列表中移除怪物。这使用了列表的Remove函数而不是RemoveAt。
fzwojiic2#
不,从列表中删除它不会破坏它。List.Remove()不会破坏GameObjects -它只是你的个人列表。你需要调用GameObject.Destroy(list[index]);然后您可以列出.RemoveAt(index);然而,如果我们讨论的列表不是GameObjects,而是你自己的普通Class(),那么你就不需要担心内存分配问题,因为有一种叫做垃圾收集的东西,一旦没有人再对一个对象进行活动引用,.NET就会释放该对象的内存。
l7mqbcuq3#
我刚才也有类似的问题。
在列表中存储Unity游戏对象的问题是删除变成了两个部分的问题。首先你需要删除游戏对象,然后是列表项。
如果您尝试在ForEach循环中执行此操作,则会变得很棘手,因为在ForEach循环中删除项会导致问题,因为您正在通过删除其中一个集合来动态更改循环的条件。
我的工作是使用一个for next循环和一个布尔标志来完成这项工作。