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.
Wyzwanie
ŁatwyWyświetlaj rozmowę Miry i Toma po jednym wierszu naraz.
- Zadeklaruj klasę
[System.Serializable]Linez publicznymi ciągami znakówspeakeritext, a także dodajpublic List<Line> lines;. - Na początku wyświetl
lines[0]: jej rozmówcę wspeakerText, a jej tekst wlineText. - Klawisz spacji wyświetla następny wiersz, aż do
lines.Count. Po ostatnim ukryjboxi zapisz w loguDialogue 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
1Komponenty, nie hierarchie
Małe komponentyBazowy skrypt przeciwnikaKomponenty abstrakcyjneWspółpracujące komponentyPowtórka: modułowa wieżyczkaPowtórka: podwójne działo4Dane serializowane
Klasy serializowalneListy w InspectorzeEnumy w InspectorzePodsumowanie: tabela łupówPodsumowanie: losowanie łupów2Interfejsy w Unity
IDamageableInterfejsy i TryGetComponentGetComponentsPowtórka: klawisz interakcjiPowtórka: najbliższy w zasięgu5ScriptableObjects
Zasoby danychStatystyki broniWspółdzielone ustawieniaOcal wiatrFale jako danePowtórka: Baza przedmiotówPowtórka: Kupowanie w sklepie8Kod wielokrotnego użytku
Metody rozszerzająceGeneryczny singletonGeneryczne metody pomocniczePodsumowanie: FindNearestPoćwicz samodzielnie: Edytor online Unity