为什么 instantiate/destroy 在性能方面很差?

Why instantiate/destroy are bad in term of performance?

我听说过很多关于 Instantiate/destroy gameObjects 在游戏场景中的动态表现有多糟糕。 所以我制作了对象池以重用游戏对象。 但我不明白为什么表现如此糟糕。 请解释一下原因。

Unity 是一个混合引擎,部分使用托管语言 C# 编写,部分使用 Natvie C++ 编写。一个 GameObject 包含一个从 C# 端可见的部分(因此您可以访问它),但也包括必须对 C++ 端可见的部分,C++ 端维护自己的对象列表,但也有一个回调列表,它必须对 C# 代码进行修改(即更新、OnCollisionEnter 等)。对于您创建/实例化的每个对象,周围都有很多改组的东西,allocating/deallocating 内存,建立给定对象上存在的脚本列表,转换得到更新,通常引擎需要做很多准备工作 运行之后比较快。 onbjects 也通过反射扫描回调,这个过程涉及很多 P/Invokes.