Menu
CoddyTech

Listy w Inspectorze

Część sekcji Architektura gier w Unity ścieżki Unity w Coddy. Lekcja 16 z 50.

Lista elementów [System.Serializable] to tabela, którą wypełniasz w Inspectorze. Ten strażnik przemierza trasę z przystankami i czeka na każdym z nich tak długo, jak określono w jego elemencie:

[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 wyświetla Stops z liczbą elementów oraz jednym rozwijanym panelem dla każdego z nich: Element 0, Element 1 i tak dalej. Każdy zawiera Point i Wait. Przycisk + dodaje element, przycisk minus usuwa zaznaczony element, a uchwyt po lewej stronie wiersza pozwala przeciągnąć go w nowe miejsce na trasie. Kod odczytuje listę w zwykły sposób: stops.Count elementów, stops[current].point, a (current + 1) % stops.Count po ostatnim przystanku wraca do pierwszego. Projektant poziomu może przypisać jednemu strażnikowi trzy przystanki, a innemu dziesięć, bez modyfikowania skryptu.

Tablica, public Stop[] stops;, jest wyświetlana w ten sam sposób. Przycisk + w Unity kopiuje ostatni element, więc nowy przystanek zaczyna z takim samym punktem i czasem oczekiwania jak element powyżej. Unity nie wyświetla ani nie zapisuje list list, takich jak List<List<Stop>>, ani słowników. Zamiast tego opakuj wewnętrzną listę w klasę [Serializable], na przykład Route z własną listą List<Stop>, i przechowuj listę takich obiektów.

challenge icon

Wyzwanie

Łatwy

Mira i Tom utknęli przy zniszczonym moście. Napisz okno dialogowe w pliku Dialogue.cs, na HUD-zie. Scena łączy elementy box, speakerText i lineText, a rozmowa jest już gotowa do umieszczenia na liście o nazwie lines.

  • Zadeklaruj klasę Line z dwoma publicznymi polami typu string: speaker i text, które będą widoczne w Inspectorze, oraz dodaj do klasy Dialogue publiczną listę List<Line> o nazwie lines.
  • Na początku okno wyświetla pierwszą linijkę: jej wypowiedź w speakerText, a jej tekst w lineText.
  • Każde naciśnięcie klawisza spacji wyświetla następną linijkę. Rozmowa może składać się z dowolnej liczby linijek, więc skorzystaj z liczby elementów na liście.
  • Naciśnięcie klawisza spacji przy ostatniej linijce ukrywa okno i zapisuje w logu Dialogue over. Potem naciśnięcie spacji nic nie robi.

Naciśnij Play, przeczytaj rozmowę, naciskając spację, a następnie naciśnij Check.

Spróbuj swoich sił

using UnityEngine;
using TMPro;

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

    void Start()
    {
        // pokaż pierwszą kwestię
    }

    void Update()
    {
        // Space: następna kwestia lub koniec rozmowy
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Architektura gier w Unity