Использование MakeItRain
и явное определение типа лучше, чем использование GameObject
.
Как заметил @hacksalot, использование MakeItRain
предлагает строгую типизацию . Одно из преимуществ этого связано с вашим комментарием:
В обоих случаях в Инспекторе я должен перетащить GameObject A
в слот GameObject B.
Если вы явно установите тип общедоступной переменной MakeItRain
вместо GameObject
, невозможно перетащить GameObject A в слот GameObject B , если GameObject A не имеет скрипт правильного типа. Это дает вам проверку времени компиляции / редактирования, что вы связываетесь с правильным GameObject в Инспекторе редактора Unity .
Также, хотя это и не обязательно, с использованием GameObject
ссылок часто поощряет более сложный код , либо из-за ненужной цепочки методов вместе (например, GetComponent
) только потому, что тип не был указан, либо потому что это добавляет трения к написанию и использованию вспомогательных методов. Рассмотрим даже простой пример, который читается лучше:
makeitrain.Drizzle()
makeitrain.GetComponent<MakeItRain>().Drizzle()
Я понимаю, что первый метод дает мне больше гибкости, потому что я
может вызвать другие компоненты GameObject A, а не только
Материал сценария.
Обратите внимание, что у вас все еще есть возможность доступа к GameObject
, это просто более многословно (что является одним из недостатков этого подхода):
public MakeItRain makeitrain;
void Start()
{
makeitrain.gameObject.SetActive(false)
}
Тем не менее, вы, вероятно, в любом случае будете использовать вспомогательные методы (для чего-то большего, чем базовые вызовы) или даже методы-оболочки (которые неудобно писать, но иногда полезны для удобства чтения).
В большинстве случаев преимущества соединения с классом, а не GameObject
, перевешивают недостатки.