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.
Wyzwanie
ŁatwyMira 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ę
Linez dwoma publicznymi polami typu string:speakeritext, które będą widoczne w Inspectorze, oraz dodaj do klasy Dialogue publiczną listęList<Line>o nazwielines. - Na początku okno wyświetla pierwszą linijkę: jej wypowiedź w
speakerText, a jej tekst wlineText. - 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
}
}
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
1Komponenty, nie hierarchie
Małe komponentyPodstawowy skrypt przeciwnikaKomponenty abstrakcyjneWspółpracujące komponentyPodsumowanie: modułowa wieżyczka4Dane serializowane
Klasy serializowalneListy w InspectorzeWyliczenia w InspectorzePodsumowanie: tabela łupów10Projekt: Arena przetrwania
BohaterTypy wrogów2Interfejsy w Unity
IDamageableInterfejsy i TryGetComponentGetComponentsPodsumowanie: klawisz interakcji5ScriptableObjects
Zasoby danychStatystyki broniWspółdzielone ustawieniaFale jako danePowtórka: baza danych przedmiotów8Kod wielokrotnego użytku
Metody rozszerzająceGeneryczny singletonGeneryczne metody pomocniczePodsumowanie: FindNearest