2014-10-07 129 views
2

除了变换(当父对象被移动,然后孩子也被移动时),子对象在Unity中从它的父对象继承了什么?Unity3D - 子对象从父对象继承的是什么?

+0

我也有兴趣。我认为变换(位置,旋转..)是唯一被“保证”共同的组件。所以我的猜测,就是这个。 – Catwood 2014-10-07 13:46:08

回答

2

Unity的继承不像纯粹的OOP继承。这不像一个基类提供一个孩子继承的虚拟成员。

在Unity中,子对象继承只有Transform。它并没有真正地继承它,它只是成为它自己的Transform组件的基础,因此在修改子组件时它将相对于父组件。由于所有对象默认都需要至少只有一个组件(Transform),它几乎可以由子对象继承。

2

孩子不会直接继承父变换,而是孩子变换与父母变换相对。因此,如果我们以变换位置为例,没有父项的GameObject将与世界坐标相关,而带有父项的GameObject将与父项位置相关。你可以使用localPosition得到相对位置,如果GameObject没有父母,那么它将等于Transform.position

至于更具体的例子(我将使用二维坐标为简单起见):

说,我们在世界上的地位(0,0)没有任何的父母有一个游戏物体(A)。其Transform.position将(0,0)和Transform.localPosition也将(0,0)。如果我们添加另一个游戏对象(B),使它成为A的子元素并将其世界位置设置为(1,0),那么其Transform.positionTransform.localPosition都将是(1,0)。现在如果我们将GameObject A移动到(2,0),我们会看到B会移动到(3,0)的世界空间中,但其Transform.localPosition仍然是(1,0),因为这是相对于A的位置。

孩子不会继承父项的任何其他内容,但该关系可用于通过Transform.parentTransform.GetChild获取彼此的引用。