为什么Unity用一些函数比如GetChild()用transform而不用gameObject?

Why does Unity use transform instead of gameObject with some functions such as GetChild()?

Unity 使用 transform.GetChild(childNum) 而不是 gameObject.GetChild(childNum)

我知道 Unity 中的每个 GameObject 都有一个 Transform 组件和函数 returns child 的 Transform,但是使用 GameObject class 不是更合乎逻辑吗] 得到一个 child 因为它指的是场景或项目中的实际游戏对象而不仅仅是一个组件?为什么要使用 Transform 来查找层次信息?

看起来有点奇怪,但事实就是如此。变换保持位置和大小,变换按顺序合并以获得项目的最终位置、旋转、倾斜和缩放。因此,它们似乎是保持连接以有效遍历渲染引擎和更新 children.

中的 rotationposition 的原因。

因此这就是它在 Unity 中的定义方式。要从一个 gameObject 到第一个 child,你需要去 (this).transform.getChild(0).gameObject .

OBJ_A        -->   transform
                       |
                       V
gameObject   <--   transform.getChild()

只是一个定义问题。以后不会变(除非看DOTS)。

这可能是一个设计决定。 主要遵循程序员范式 "single responsibility".

他们将逻辑外包给另一个 class,因为在设计师看来,它与 class 游戏对象的主要目标无关。

Why is the Transform used for finding hierarchical information?

因为变换充当(并且是)子项和父项之间的锚点,无论是形象上还是字面意义上的。