Холст и текст
Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 1 из 56.
Unity отображает экранный текст, кнопки и полосы с помощью своей системы интерфейса. В Unity 6 пункт GameObject > UI > Text - TextMeshPro добавляет текстовый объект с именем Text (TMP); при первом добавлении Unity предлагает импортировать TMP Essentials, которые нужны тексту для шрифта. Если в сцене ещё нет Canvas, Unity создаёт его и помещает текст внутрь, а также добавляет EventSystem, через который проходят щелчки по элементам интерфейса. Canvas отображает свои дочерние объекты поверх изображения с камеры в фиксированном месте экрана, куда бы ни смотрела камера. Установи для параметра Canvas Scaler значение Scale With Screen Size, 1920 x 1080 и Match 0.5, как это сделано в каждой сцене этого курса, и макет сохранит свои пропорции при любом размере экрана.
Компонент текста называется TextMeshPro - Text (UI). В скриптах его хранят в поле базового типа TMP_Text из пространства имён TMPro и изменяют отображаемое содержимое через его свойство text, имеющее тип string. Этот скрипт задаёт название уровня при запуске:
using UnityEngine;
using TMPro;
public class LevelIntro : MonoBehaviour
{
public TMP_Text titleText;
void Start()
{
titleText.text = "World 2: Ice Caves";
}
}Перетащи объект Text (TMP) из Hierarchy в слот Title Text в Inspector, и Unity поместит его текстовый компонент в поле. Без using TMPro; имя TMP_Text не распознаётся, и скрипт не компилируется (CS0246). Если оставить слот пустым, первое обращение к titleText.text вызовет UnassignedReferenceException. Текст, который записывает скрипт, заменяет введённый в Inspector текст Text Input; для нового текстового объекта это New Text.
Задание
ЛегкоИсследователь ходит по острову с помощью стрелок влево и вправо, как это уже делает Explorer.cs. Показывай, где он находится, в ZoneText в верхней части экрана, где по-прежнему отображается «Новый текст:»:
- Добавь
using TMPro;и публичное полеTMP_Textс именемzoneText. В сцене ZoneText привязан к полю с таким точным именем. - Каждый кадр отображай текст
Zone: Beach, пока координата x исследователя меньше 2, иZone: Jungle, начиная с 2.
Нажми Play, пройдись по траве и обратно, затем нажми Check.
Попробуйте сами
using UnityEngine;
public class Explorer : MonoBehaviour
{
public float speed = 4f;
void Update()
{
float move = Input.GetAxisRaw("Horizontal");
transform.Translate(move * speed * Time.deltaTime, 0f, 0f);
// Показывай зону в ZoneText: Zone: Beach при x < 2, Zone: Jungle при x ≥ 2
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Создание настоящих игр
1Текст на экране
Холст и текстПокажем счётФорматирование чиселТаймер обратного отсчётаПовторение: спидометр4Сцены и уровни
Загрузить сценуПерезапустить уровеньСледующий уровеньСохранить между сценамиПовторение: выбор уровня7Управление временем
Пауза с timeScaleЗамедленное движениеНемасштабируемое времяПовторение: Bullet Time10Проект: 3D-платформер
ТрассаДвижущиеся платформы2Кнопки и экраны
Кнопки и onClickЛямбдыСвязи в InspectorВключение и выключение панелейШкалы здоровьяПовторение: магазин улучшений5Сохранение с помощью PlayerPrefs
Сохранение числаЗагрузка со значением по умолчаниюРекордСохранение настроекПовторение: монеты в банке