Unity C#: UI и GameObject.Find — Урок 8

Этот урок посвящен работе с пользовательским интерфейсом (UI) в Unity и функции GameObject.Find(). Создадим текстовое поле для отображения количества прохождений игрового объекта через препятствие.

Создание и подключение UI-элементов

Создадим текстовое поле, отображающее количество столкновений объекта с препятствием (например, стеной). Его размеры настроены на 300 пикселей, и оно прикреплено к камере для удобства просмотра.

Работа со скриптом

Добавим в скрипт (прикрепленный к префабу кубика с именем paint) необходимые директивы using:

using UnityEngine.UI;

Создадим переменную типа Text для доступа к текстовому полю:

public Text text;

В функции OnTriggerEnter, срабатывающей при столкновении, изменим логику подсчета и вывода информации в текстовое поле. Добавим переменную счетчика count и используем ToString() для преобразования числа в строку:

private int count = 0;

void OnTriggerEnter(Collider other)
{
    count++;
    text.text = other.gameObject.name + " " + count.ToString();
}

Использование GameObject.Find()

Прямое присвоение текстового поля в префабе не работает. Решим проблему с помощью функции GameObject.Find(), которая находит объект по имени в иерархии сцены:

public Text text;

void Start()
{
    text = GameObject.Find("Text").GetComponent<Text>();
}

В функции Start() мы ищем объект с именем «Text» и получаем его компонент Text. Теперь скрипт работает с текстовым полем независимо от местоположения префаба. Поле корректно отображает количество столкновений.

Альтернативы GameObject.Find()

Функция GameObject.Find() перебирает все объекты сцены, что снижает производительность в больших проектах. Рекомендуется использовать публичные переменные и назначать ссылки на объекты в инспекторе Unity.

В этом уроке мы освоили работу с пользовательским интерфейсом Unity (на примере текстового поля) и функцию GameObject.Find() для поиска объектов в сцене. GameObject.Find() может быть неэффективна в больших проектах; рекомендуются альтернативные методы.

Что будем искать? Например,программа