Menu
CoddyTech

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

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

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

Задание

Средне

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

  1. В Start() задайте goal = GameObject.Find("Goal").transform;.
  2. В Update() при Input.GetKeyDown(KeyCode.Space) выведите в журнал "Distance to goal: " + Vector3.Distance(transform.position, goal.position).

Нажмите «Играть» и нажмите Space: в консоли появится Distance to goal: 5. Затем нажмите «Проверить».

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

using UnityEngine;

public class Beacon : MonoBehaviour
{
    private Transform goal;

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

    void Update()
    {
        // Space: выведи в лог расстояние до цели.
    }
}

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

Потренируйтесь самостоятельно: Песочница Unity