【问题标题】: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】:

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

      因此,这正是 Unity 中定义的方式。从一个游戏对象到第一个孩子,你需要去(this).transform.getChild(0).gameObject

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

      只是定义问题。未来不会改变(除非关注 DOTS)。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-10-31
          • 1970-01-01
          • 1970-01-01
          • 2018-04-26
          • 2011-09-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多