Menu
CoddyTech

Listy w Inspectorze

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

Lista elementów [System.Serializable] to tabela, którą wypełniasz w Inspectorze. Ten strażnik przemierza trasę z przystankami i czeka przy 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 pokazuje Stops wraz z liczbą elementów oraz osobnym rozwijanym polem dla każdego z nich: Element 0, Element 1 itd.; każde zawiera Point i Wait. Przycisk + dodaje element, przycisk minus usuwa zaznaczony element, a uchwyt po lewej stronie wiersza pozwala przeciągnąć go w inne miejsce na trasie. Kod odczytuje listę w zwykły sposób: stops.Count elementów, stops[current].point, a (current + 1) % stops.Count wraca do pierwszego przystanku po ostatnim. Projektant poziomów może ustawić 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 listy list, takiej jak List<List<Stop>>, ani słownika. Zamiast tego umieść wewnętrzną listę w klasie [Serializable], na przykład Route z własną List<Stop>, i przechowuj listę takich obiektów.

challenge icon

Wyzwanie

Łatwy

Wyświetlaj rozmowę Miry i Toma po jednym wierszu naraz.

  1. Zadeklaruj klasę [System.Serializable] Line z publicznymi ciągami znaków speaker i text, a także dodaj public List<Line> lines;.
  2. Na początku wyświetl lines[0]: jej rozmówcę w speakerText, a jej tekst w lineText.
  3. Klawisz spacji wyświetla następny wiersz, aż do lines.Count. Po ostatnim ukryj box i zapisz w logu Dialogue over; potem klawisz spacji nic nie robi.

Naciśnij „Graj” i czytaj, naciskając spację. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;

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

    void Start()
    {
        // wyświetl pierwszą kwestię
    }

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

Wszystkie lekcje w sekcji Architektura gier w Unity

Poćwicz samodzielnie: Edytor online Unity