Menu
CoddyTech

Холст и текст

Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 1 из 60.

Unity отображает экранный текст, кнопки и полосы с помощью своей системы UI. В Unity 6 пункт меню GameObject > UI > Text - TextMeshPro добавляет текстовый объект с именем Text (TMP); при первом добавлении Unity предлагает импортировать TMP Essentials, необходимые тексту для шрифта. Если в сцене ещё нет Canvas, Unity создаёт его и помещает текст внутрь, а также добавляет EventSystem, через который проходят нажатия на элементы UI. 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. Текст, который записывает скрипт, заменяет текст, введённый в поле Text Input в Inspector; для нового текстового объекта там указано New Text.

challenge icon

Задание

Легко

Покажи, в какой зоне находится исследователь, в ZoneText вверху.

  1. В Explorer.cs добавь using TMPro; и поле public TMP_Text zoneText;. Сцена связывает ZoneText с этим именем.
  2. В Update(), ниже комментария, присвой zoneText.text значение Zone: Beach, пока transform.position.x меньше 2, а в противном случае — Zone: Jungle.

Нажми «Играть» и иди направо, на траву: текст изменится на Jungle. Затем нажми «Проверить».

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

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
    }
}

Все уроки раздела Создание настоящих игр

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