c# - 如何销毁 unity 游戏对象并同时从列表中删除?

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

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

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

回答1

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

回答2

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

相似文章

最新文章