Menu
CoddyTech

Поиск по имени

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

GameObject.Find("Player") ищет на сцене активный объект с точно таким именем и возвращает его либо null, если такого объекта нет. Это избавляет от необходимости связывать поле в Inspector, но за это приходится платить: поиск просматривает каждый объект на сцене. Поэтому вызывай его один раз, в Start(), и сохраняй результат в поле. Эта камера наблюдения находит Player при запуске игры и следит за ним в каждом кадре:

private Transform player;

void Start()
{
    player = GameObject.Find("Player").transform;
}

void Update()
{
    transform.LookAt(player);
}

Имя должно точно совпадать, включая заглавные буквы и пробелы: поиск по "player" или "Player " ничего не найдёт. Find также пропускает неактивные (скрытые) объекты. Если поиск не удался, он молча возвращает null, а ошибка появляется на следующей строке, где используется результат: здесь .transform вызывает NullReferenceException. Путь вроде "Car/Wheel" находит Wheel — дочерний объект Car.

challenge icon

Задание

Средне

Ровер сообщает, как далеко находится его цель.

  • В Start() найди объект с именем Goal и сохрани его Transform в goal.
  • Каждый раз, когда нажимается клавиша пробела, выведи расстояние от ровера до цели в таком виде: Distance to goal: 5.

Цель может двигаться, поэтому измеряй расстояние в момент нажатия клавиши пробела.

Нажми Play, щёлкни по игровому окну и нажми пробел, затем нажми Check.

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

using UnityEngine;

public class Beacon : MonoBehaviour
{
    private Transform goal;

    void Start()
    {
        // Найдите объект с именем Goal и сохраните его Transform в goal.
    }

    void Update()
    {
        // Space: выведите расстояние до цели в журнал.
    }
}
quiz iconПроверьте себя

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

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