2014-10-07 8 views
2

Что дочерний объект наследует от своего родителя в Unity, кроме transform (при перемещении родительского объекта, потом перемещаются и дети)?Unity3D - Что наследует дочерний объект от родителя?

+0

Меня также интересует. Я думаю, что преобразование (положение, вращение ..) является единственным компонентом, который будет «гарантирован», чтобы быть общим. Так что я предполагаю, что это именно так. – Catwood

ответ

2

Наследование Unity не похоже на наследование чистого ООП. Это не похоже на базовый класс, который предоставляет виртуальным членам, которые наследует ребенок.

В Unity дочерний объект наследует только Transform. Он на самом деле не наследует его, он просто становится базой для своего собственного компонента Transform, поэтому при модификации дочернего компонента он будет относиться к родительскому. Поскольку все объекты по умолчанию должны иметь хотя бы один компонент (Transform), это почти все, что может быть унаследовано дочерним объектом.

2

Ребенок не будет наследовать родителей, которые преобразуются напрямую, а преобразование childs становится относительным по отношению к родительскому. Поэтому, если мы возьмем пример положения преобразований, GameObject без родителя будет относиться к мировым координатам, тогда как GameObject с родителем будет относиться к позиции родителей. Вы можете получить относительное положение, используя localPosition, который будет равен Transform.position, если GameObject не имеет родителей.

В качестве более конкретного примера (я буду использовать 2D координаты для простоты):

Say мы имеем GameObject (A) в мировой позиции (0,0) без каких-либо родителей. Его Transform.position будет (0,0) и Transform.localPosition также будет (0,0).

Если мы добавим еще один GameObject (B), сделайте его дочерним по А и установите его мировое положение равным (1,0), тогда его Transform.position и Transform.localPosition оба будут (1,0).

Теперь, если бы мы переместили GameObject A в (2,0), мы увидели бы, что B переместится в (3,0) в мировом пространстве, но его Transform.localPosition будет по-прежнему (1,0), поскольку это относительно положения A.

Ребенок не наследует ничего от родителя, хотя связь может использоваться в коде для получения ссылок друг на друга через Transform.parent и Transform.GetChild.

Смежные вопросы