Menu
CoddyTech

Ссылки лучше поиска

Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 45 из 67.

Скрипт может получить доступ к другому объекту четырьмя способами: через поле, заданное в Inspector, с помощью поиска GameObject.Find по имени, поиска по тегу или поиска FindAnyObjectByType по типу. Для объекта, который находится на сцене с самого начала, в коде Unity используют поле Inspector по трём причинам:

  • Скорость. Ссылка заполняется до начала игры. При каждом поиске просматриваются объекты сцены, а поиск в Update() выполняется каждый кадр.
  • Надёжность. Строка с именем перестаёт работать, если кто-то переименует объект: Find возвращает null, и ошибка появляется позже, в строке, где это значение используется. Пустое поле Inspector вызывает UnassignedReferenceException, в котором указаны имя поля и скрипта.
  • Наглядность. В Inspector видно, от чего зависит скрипт. Вызов Find скрывает эту зависимость в коде.
// назначается один раз в Inspector: поиск не требуется, а переименование ничего не меняет
[SerializeField] private Transform door;

// поиск выполняется на каждом кадре, а после переименования двери результат — null
void Update()
{
    Transform d = GameObject.Find("Door").transform;
}

Поиск полезен в некоторых случаях: для объектов, которые появляются только во время игры, например при создании во время игрового процесса, и для скриптов, которые должны работать на любой сцене. Даже в таких случаях выполняйте поиск один раз в Start() и сохраняйте результат в поле.

Попробуйте сами

В этом уроке нет задания по программированию.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы скриптинга в Unity