性能差异:一个空的GameObject具有多个子对象,而单个GameObject是通过预合并前一个子对象而形成的

想象一下机器人游戏,机器人是由预制块组成的。 因此,每个块都是一个单独的GameObject,每个块都有一个网格

我试图理解下面的概念差异。 有一个空的GameObject表示多个子GameObjects / Meshes(也就是构成机器人的部分)的父代的机器人是更好的性能和记忆方式,还是更好地转换成一个单一的联合GameObject /网格将是最终的机器人?

当我提到“理解概念”时,我的意思是理解为什么这两个选项在网格几何数据的内存分配和处理(cpu – > drawcalls – > gpu)方面都有其缺点。

没有一个适合所有答案的答案,情况经常如此。

一般来说, 如果你可以预先计算,那就去做吧

如果你的机器人一直没有改变,比如你建立它,并且它一直保持不变,那么每一帧计算它的所有部分有什么意义呢? 但是,如果它一直在变化,那么显然你不可能把它全部变成一个大对象。

您可能已经意识到,有越多的东西在计算上越贵,例如碰撞检测。 所以你有兴趣保持游戏对象的数量很低(-ish)。

说到渲染,理想情况下,你会希望有一个VBO和IBO的整个机器人,所以你可以推到GPU一次,然后只是参考它永远。 相反,如果将机器人分成几个部分,则必须为每个位进行绘制调用。 虽然GPU最终的绘图数量是相同的,但CPU转换所有GPU指令的工作量要高得多。

所以在大多数情况下,把它作为一个大对象会更好。 但有些情况下,其他治疗也可能会更好。
计算一切你需要把你的机器人视为一个对象是相对计算密集型和内存沉重。 (相比于把所有东西都保存为块的集合)所以,如果你在一个垃圾收集环境,并希望最大限度地减less你的内存占用,如果每一个块更改,你必须重新计算的大对象,它可能会导致垃圾收集每时间,使你的游戏滞后一帧。