【问题标题】:Why does Unity use transform instead of gameObject with some functions such as GetChild()?为什么 Unity 使用了一些函数如 GetChild() 的 transform 而不是 gameObject?
【发布时间】:2020-08-05 19:53:52
【问题描述】:
Unity 使用 transform.GetChild(childNum) 而不是 gameObject.GetChild(childNum)。
我知道 Unity 中的每个 GameObject 都有一个 Transform 组件,并且该函数返回子组件的 Transform,但是使用 GameObject 类来获取子组件不是更合乎逻辑,因为它引用了实际的 GameObject场景或项目,而不仅仅是一个组件?为什么要使用 Transform 来查找分层信息?
【问题讨论】:
标签:
c#
unity3d
transform
parent-child
gameobject
【解决方案1】:
为什么使用 Transform 来查找分层信息?
因为变换充当(并且是)孩子和父母之间的锚点,无论是形象上还是字面上。
【解决方案2】:
看起来有点奇怪,但事实就是如此。变换保持位置和大小,变换按顺序合并以获得项目的最终位置、旋转、倾斜和缩放。因此,它们似乎是保持连接以高效遍历引擎以进行渲染和更新子级中的rotation 和position。
因此,这正是 Unity 中定义的方式。从一个游戏对象到第一个孩子,你需要去(this).transform.getChild(0).gameObject。
OBJ_A --> transform
|
V
gameObject <-- transform.getChild()
只是定义问题。未来不会改变(除非关注 DOTS)。
【解决方案3】:
这可能是一个设计决定。
主要遵循程序员范式“单一职责”。
他们将逻辑外包给了另一个类,因为在设计师看来,它与类游戏对象的主要目标无关。