Почему Unity использует transform вместо gameObject с некоторыми функциями, такими как GetChild ()? - PullRequest
3 голосов
/ 22 апреля 2020

Unity использует transform.GetChild(childNum) в отличие от gameObject.GetChild(childNum).

Я понимаю, что у каждого GameObject в Unity есть компонент Transform, и функция возвращает Transform дочернего элемента, но не будет ли это более логичным использовать класс GameObject, чтобы получить ребенка, поскольку он ссылается на фактический GameObject в сцене или проекте, а не только на компонент? Почему Transform используется для поиска иерархической информации?

Ответы [ 3 ]

2 голосов
/ 22 апреля 2020

Почему Преобразование используется для поиска иерархической информации?

Поскольку преобразования служат (и являются) якорями между детьми и родителями, как в переносном, так и в буквальном смысле.

1 голос
/ 22 апреля 2020

Это кажется немного странным, но так оно и есть. Преобразования сохраняют положение и размер, и преобразования объединяются в последовательности, чтобы получить окончательное местоположение, поворот, наклон и масштаб элемента. Похоже, что именно они поддерживают связь для эффективного обхода движка рендеринга и обновления rotation и position в дочерних элементах.

Таким образом, именно так это определено в Unity. Чтобы перейти от gameObject к первому дочернему элементу, вам нужно go (this).transform.getChild(0).gameObject.

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

Это всего лишь вопрос определения. Не изменится в будущем (если не смотреть на DOTS).

0 голосов
/ 22 апреля 2020

Это, вероятно, проектное решение. Главным образом следуя парадигме программиста «единственная ответственность».

Они передали логи c другому классу, потому что на взгляд дизайнеров это не имеет ничего общего с главной целью класса gameobject.

...