Menu
CoddyTech

Списки в Inspector

Часть раздела Архитектура игр в Unity путешествия по Unity на Coddy. Урок 16 из 50.

Список элементов [System.Serializable] — это таблица, которую ты заполняешь в Inspector. Этот охранник проходит маршрут по точкам и ждёт в каждой столько, сколько указано в соответствующей записи:

[System.Serializable]
public class Stop
{
    public Transform point;
    public float wait = 1f;
}

public class Patrol : MonoBehaviour
{
    public float speed = 3f;
    public List<Stop> stops;
    private int current;
    private float waited;

    void Update()
    {
        Stop stop = stops[current];
        transform.position = Vector3.MoveTowards(transform.position, stop.point.position, speed * Time.deltaTime);
        if (transform.position != stop.point.position) return;
        waited += Time.deltaTime;
        if (waited >= stop.wait)
        {
            waited = 0f;
            current = (current + 1) % stops.Count;
        }
    }
}

В Inspector отображается Stops с количеством элементов и отдельным сворачиваемым пунктом для каждой записи: Element 0, Element 1 и так далее. В каждом есть поля Point и Wait. Кнопка + добавляет запись, кнопка минус удаляет выбранную, а маркер слева от строки позволяет перетащить её в другое место маршрута. Код работает со списком как обычно: stops.Count записей, stops[current].point, а выражение (current + 1) % stops.Count возвращает к первой точке после последней. Дизайнер уровней может задать одному охраннику три точки, а другому — десять, не меняя скрипт.

Массив public Stop[] stops; отображается так же. Кнопка + в Unity копирует последнюю запись, поэтому новая точка начинается с теми же point и wait, что и запись выше. Unity не отображает и не сохраняет список списков, например List<List<Stop>>, или Dictionary. Вместо этого оберни внутренний список в класс [Serializable], например Route с собственным List<Stop>, и храни список таких объектов.

challenge icon

Задание

Легко

Мира и Том застряли у разрушенного моста. Создай диалоговое окно в Dialogue.cs на HUD. Сцена связывает box, speakerText и lineText, а беседа подготовлена для списка с именем lines.

  • Объяви класс Line с двумя открытыми строками speaker и text, которые можно отображать в Inspector, и добавь в Dialogue открытый список List<Line> с именем lines.
  • В начале окно показывает первую строку: говорящего — в speakerText, а его текст — в lineText.
  • При каждом нажатии Space показывай следующую строку. В беседе может быть любое количество строк, поэтому ориентируйся на количество элементов в списке.
  • Нажатие Space на последней строке скрывает окно и выводит в лог Dialogue over. После этого нажатие Space ничего не делает.

Нажми Play, прочитай беседу, нажимая Space, затем нажми Check.

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

using UnityEngine;
using TMPro;

public class Dialogue : MonoBehaviour
{
    public GameObject box;
    public TMP_Text speakerText;
    public TMP_Text lineText;

    void Start()
    {
        // показать первую реплику
    }

    void Update()
    {
        // Space: следующая реплика или завершение диалога
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Архитектура игр в Unity