C# 为什么Unity在一些函数中使用transform而不是gameObject,比如GetChild()?

C# 为什么Unity在一些函数中使用transform而不是gameObject,比如GetChild()?,c#,unity3d,transform,parent-child,gameobject,C#,Unity3d,Transform,Parent Child,Gameobject,Unity使用transform.GetChild(childNum)而不是gameObject.GetChild(childNum) 我知道Unity中的每个游戏对象都有一个变换组件,该函数返回子对象的变换,但是使用GameObject类来获取子对象不是更合乎逻辑,因为它指的是场景或项目中的实际游戏对象,而不仅仅是一个组件?为什么要使用转换来查找层次信息?看起来有点奇怪,但事实就是这样。变换保持位置和大小,并按顺序合并变换以获得项目的最终位置、旋转、倾斜和缩放。因此,它们似乎是保持引擎有效遍历

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


我知道Unity中的每个游戏对象都有一个变换组件,该函数返回子对象的变换,但是使用GameObject类来获取子对象不是更合乎逻辑,因为它指的是场景或项目中的实际游戏对象,而不仅仅是一个组件?为什么要使用转换来查找层次信息?

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

因此,这就是它在统一中被定义的方式。要从游戏对象获取第一个子对象,需要转到
(this).transform.getChild(0).gameObject

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

gameObject这可能是一个设计决策。 主要遵循程序员范式“单一责任”

他们将逻辑外包给了另一个类,因为在设计师眼中,它与类gameobject的主要目标无关

为什么转换用于查找分层信息

因为变换在形象上和字面上都充当(并且是)子级和父级之间的锚