我听到了很多有关性能差的实例如何动态地实例化/破坏游戏场景中的gameObject的信息。 因此,我创建了对象池以供重复使用gameObjects。 但是我不明白为什么性能这么差。 请解释一下原因。
答案 0 :(得分:2)
Unity是一种混合引擎,其部分使用托管语言C#编写,而部分使用natvie C ++编写。 GameObject包含一个从C#端可见的部分(因此您可以访问它),还包括一个必须在C ++端可见的部分,该部分保留了自己的对象列表,但还具有一个回调列表,必须使用C#代码(即Update,OnCollisionEnter等)。对于每个创建/实例化的对象,周围都有很多混搭的事情,分配/释放内存,在给定对象上建立脚本列表,转换得到更新,并且通常需要大量准备工作,引擎随后需要相对快速地运行。还可以通过反射来扫描对象,以查找回调,并且该过程涉及大量P / Invokes。