你如何销毁一个统一的游戏对象并同时从列表中删除?

How do you destroy a unity GameObject and remove from a list at the same time?

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

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

我试过删除怪物,销毁然后删除,将怪物保存到 var 然后删除然后销毁,所有这些都会导致错误。如果我知道该命令是如何工作的,我可以将问题缩小到代码中的那个或其他内容。

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

不,将其从列表中删除不会破坏它。 List.Remove() 不会破坏游戏对象 - 它只是您的个人列表。您需要致电 GameObject.Destroy(list[index]);然后你可以 list.RemoveAt(index);将其从您的列表中删除。但是,如果我们讨论的不是 GameObjects 的列表,而是您自己的普通 Class(),那么您无需担心内存分配问题,因为有一个称为垃圾收集的东西,.NET 将一旦没有对象的活动引用就释放对象的内存。