Является ли gameObject эквивалентным этому в сценарии GameObject, к которому он прикреплен?

У меня возник вопрос относительно использования gameObject как унаследованного от MonoBehaviour при написании сценариев Unity.

В некоторых руководствах, например, для создания масштабируемой полосы здоровья, мы получаем исходный масштаб полосы здоровья следующим образом:

originalScale = gameObject.transform.localScale.x;

Я немного поиграл с этим и понял, что, поскольку я получаю преобразование объекта, которым я сейчас манипулирую, я также мог бы использовать this:

originalScale = this.transform.localScale.x;

В Unity эти два всегда эквивалентны (по крайней мере, при реализации MonoBehaviour)? Просто чаще используется gameObject, чтобы было понятно, о чем мы говорим?


person user991710    schedule 26.11.2015    source источник


Ответы (1)


this относится к объекту, описанному в сценарии. Все сценарии Monobehaviour являются компонентами, и ключевое слово this относится к текущему компоненту, который выполняет код.

gameObject — игровой объект в сцене. К игровым объектам прикреплены компоненты. Из скрипта Monobehaviour вы можете получить доступ к игровому объекту, к которому прикреплен скрипт, используя this.gameObject или gameObject, которые эквивалентны.

Ссылка, так как это было сказано лучше, чем я.


Что касается transform, это тоже Компонент. Поскольку GameObject — это просто контейнер для компонентов, когда вы делаете gameObject.transform, вы ссылаетесь на этот компонент преобразования.

Поскольку любой GameObject имеет только одно преобразование, this.transform также указывает на этот же компонент.

Это особый случай, потому что MonoBehaviour фактически наследуется от Component, что в конечном счете, если вы посмотрите на класс Component

// Summary:
//     ///
//     The Transform attached to this GameObject (null if there is none attached).
//     ///
public Transform transform { get; }

Вот почему вы получаете одинаковый результат в обоих случаях.

person ForceMagic    schedule 26.11.2015
comment
Интересно. Однако я заметил, что при использовании this (а не this.gameObject) способом, описанным выше, результат в игре был идентичным. Вы знаете, это было просто совпадение (т.е. объект в сценарии оказался таким же, как и в сцене), или я что-то упустил? - person user991710; 26.11.2015
comment
@user991710 user991710 Хорошо, я действительно забыл упомянуть эту часть, я добавил больше информации об этом в свой пост. Теперь все есть :) - person ForceMagic; 26.11.2015
comment
Отличная информация. Большое спасибо, что прояснили это! - person user991710; 26.11.2015