Menu
CoddyTech

Listen im Inspector

Teil des Abschnitts Spielarchitektur in Unity der Unity-Journey von Coddy. Lektion 16 von 50.

Eine Liste von [System.Serializable]-Einträgen ist eine Tabelle, die du im Inspector ausfüllst. Dieser Wächter geht eine Route mit Haltepunkten ab und wartet an jedem so lange, wie es in seinem Eintrag steht:

[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;
        }
    }
}

Der Inspector zeigt Stops mit seiner Anzahl und einem Aufklappfeld pro Eintrag: Element 0, Element 1 und so weiter, jeweils mit einem Point und einem Wait. Die Schaltfläche + fügt einen Eintrag hinzu, die Schaltfläche − entfernt den ausgewählten Eintrag und mit dem Griff links neben einer Zeile kannst du sie an eine neue Stelle in der Route ziehen. Der Code liest die Liste wie gewohnt: stops.Count Einträge, stops[current].point und (current + 1) % stops.Count führt nach dem letzten Halt zurück zum ersten. Ein Leveldesigner kann einem Wächter drei Haltepunkte und einem anderen zehn geben, ohne das Skript anzufassen.

Ein Array, public Stop[] stops;, wird genauso angezeigt. Unitys + kopiert den letzten Eintrag, sodass ein neuer Halt mit demselben Point und Wait wie der darüber beginnt. Unity zeigt eine Liste von Listen wie List<List<Stop>> oder ein Dictionary weder an noch speichert es sie. Verpacke stattdessen die innere Liste in eine [Serializable]-Klasse, zum Beispiel Route mit einer eigenen List<Stop>, und verwende eine Liste solcher Klassen.

challenge icon

Aufgabe

Einfach

Mira und Tom sitzen an einer kaputten Brücke fest. Schreibe das Dialogfeld in Dialogue.cs auf dem HUD. Die Szene verknüpft box, speakerText und lineText und hat das Gespräch bereits für eine Liste namens lines vorbereitet.

  • Deklariere eine Klasse Line mit zwei öffentlichen Zeichenfolgen, speaker und text, die der Inspector anzeigen kann, und gib Dialogue eine öffentliche List<Line> namens lines.
  • Zu Beginn zeigt das Feld die erste Zeile: den Sprecher in speakerText und den Text in lineText.
  • Mit jedem Druck auf die Leertaste wird die nächste Zeile angezeigt. Ein Gespräch kann beliebig viele Zeilen haben, orientiere dich also an der Anzahl der Einträge in der Liste.
  • Wird in der letzten Zeile die Leertaste gedrückt, wird das Feld ausgeblendet und Dialogue over protokolliert. Danach bewirkt die Leertaste nichts mehr.

Drücke Spielen, lies das Gespräch mit der Leertaste und klicke dann auf Prüfen.

Probier es selbst

using UnityEngine;
using TMPro;

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

    void Start()
    {
        // die erste Zeile anzeigen
    }

    void Update()
    {
        // Space: die nächste Zeile oder das Ende des Gesprächs
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Spielarchitektur in Unity