Этот урок посвящен работе с пользовательским интерфейсом (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() может быть неэффективна в больших проектах; рекомендуются альтернативные методы.