Ссылки лучше поиска
Часть раздела Основы скриптинга в 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() и сохраняйте результат в поле.
Попробуйте сами
В этом уроке нет задания по программированию.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы скриптинга в Unity
1Ваш первый скрипт
Привет, UnityРазместите кубДвигайте каждый кадрПоворачивайте каждую секундуУправляйте клавишамиПовторение: управляйте кубом2Инспектор
Поля инспектораSerializeFieldЧисла с плавающей точкой и MathfАтрибуты инспектораПовторение: лифт5Преобразования и иерархия
Родители и детиМасштабПосмотри на объектыДвигайся к точкеПовторение: Луна на орбите8Поиск объектов
Поиск по имениТегиПоиск по типуСсылки лучше поискаNull в UnityПовторение: ближайшая монета6Игровые объекты и компоненты
Ссылки в InspectorПолучение компонентаОтсутствующие компонентыДобавление компонентаRequireComponentПоказать и скрытьПовторение: выключатель света