Dialogsystem für Einheit

Ein Dialogsystem in spielen ist ein Mechanismus, der interaktive und immersive Gespräche zwischen dem Spieler und den Charakteren innerhalb der Spielwelt ermöglicht. Es dient als Kommunikationskanal, über den Spieler mit Nicht-Spieler-Charakteren (NPCs) oder anderen Wesen interagieren können, und bietet so ein Mittel zum Geschichtenerzählen, Questfortschritt, Charakterentwicklung und Weltaufbau.

Das Hauptziel eines Dialogsystems besteht darin, den Spielern ein dynamisches und ansprechendes Erlebnis zu bieten, indem es ihnen ermöglicht, Entscheidungen zu treffen, die Erzählung des Spiels zu beeinflussen und ihre Beziehungen zu den Charakteren im Spiel zu gestalten. Ein gut gestaltetes Dialogsystem kann das Eintauchen des Spielers, die emotionale Bindung und den Wiederspielwert verbessern.

Wenn es um die Spieleentwicklung in Unity geht, kann die Erstellung eines vollwertigen Dialogsystems von Grund auf recht umfangreich sein, aber es ist möglich, mit einem vereinfachten Beispiel zu beginnen. Das folgende Beispiel behandelt ein einfaches textbasiertes Dialogsystem mit C# und dem Unity UI-System. Denken Sie daran, dass dies nur ein Ausgangspunkt ist und je nach spezifischen Anforderungen erweitert und angepasst werden kann.

Erstellen Sie den Dialogmanager

  • Erstellen ein neues Skript, nennen Sie es "DialogueManager" und fügen Sie dann den folgenden Code ein:
using System.Collections;
using UnityEngine;
using UnityEngine.UI;

public class DialogueManager : MonoBehaviour
{
    public Text dialogueText;
    public Button choice1Button;
    public Button choice2Button;
    public Button nextButton;

    private Dialogue currentDialogue;
    private int currentLineIndex = 0;

    void Start()
    {
        // You can load your dialogue data from an external source (e.g., JSON, XML) or create it programmatically.
        // For simplicity, we'll create a sample dialogue here.
        currentDialogue = CreateSampleDialogue();

        // Set up event listeners for buttons
        choice1Button.onClick.AddListener(OnChoice1Selected);
        choice2Button.onClick.AddListener(OnChoice2Selected);
        nextButton.onClick.AddListener(OnNextButtonClicked);

        // Start the dialogue
        StartDialogue();
    }

    private void StartDialogue()
    {
        currentLineIndex = 0;
        DisplayLine(currentDialogue.lines[currentLineIndex]);
    }

    private void DisplayLine(DialogueLine line)
    {
        dialogueText.text = line.text;
        choice1Button.gameObject.SetActive(line.hasChoice);
        choice2Button.gameObject.SetActive(line.hasChoice);
        nextButton.gameObject.SetActive(!line.hasChoice);
    }

    private void OnNextButtonClicked()
    {
        currentLineIndex++;
        if (currentLineIndex < currentDialogue.lines.Length)
        {
            DisplayLine(currentDialogue.lines[currentLineIndex]);
        }
        else
        {
            // Dialogue is over
            EndDialogue();
        }
    }

    private void OnChoice1Selected()
    {
        HandleChoice(currentDialogue.lines[currentLineIndex].choice1);
    }

    private void OnChoice2Selected()
    {
        HandleChoice(currentDialogue.lines[currentLineIndex].choice2);
    }

    private void HandleChoice(Choice choice)
    {
        // Handle the chosen choice (e.g., change variables, trigger events)
        Debug.Log("Selected Choice: " + choice.text);

        // Advance to the next line
        currentLineIndex++;
        DisplayLine(currentDialogue.lines[currentLineIndex]);
    }

    private void EndDialogue()
    {
        // Reset the dialogue UI or close the dialogue box
        Debug.Log("End of Dialogue");
    }

    // Sample dialogue data (you can replace this with loading from an external source)
    private Dialogue CreateSampleDialogue()
    {
        Dialogue dialogue = new Dialogue();

        dialogue.lines = new DialogueLine[]
        {
            new DialogueLine("Hello there! Welcome to the Unity dialogue system example.", false),
            new DialogueLine("What would you like to do?", true, new Choice("Go on an adventure"), new Choice("Stay here")),
            new DialogueLine("Great choice! Have a fantastic adventure!", false),
            new DialogueLine("That's okay. Sometimes staying in one place can be just as exciting!", false),
            new DialogueLine("Thanks for trying out the Unity dialogue system example!", false)
        };

        return dialogue;
    }
}

[System.Serializable]
public class Dialogue
{
    public DialogueLine[] lines;
}

[System.Serializable]
public class DialogueLine
{
    public string text;
    public bool hasChoice;
    public Choice choice1;
    public Choice choice2;

    public DialogueLine(string text, bool hasChoice, Choice choice1 = null, Choice choice2 = null)
    {
        this.text = text;
        this.hasChoice = hasChoice;
        this.choice1 = choice1;
        this.choice2 = choice2;
    }
}

[System.Serializable]
public class Choice
{
    public string text;

    public Choice(string text)
    {
        this.text = text;
    }
}

Um die UI-Text- und Button-Objekte in Unity für das DialogueManager-Skript einzurichten, führen Sie die folgenden Schritte aus:

  • Klicken Sie im Unity-Editor mit der rechten Maustaste in das Hierarchiefenster und wählen Sie "UI -> Text" aus, um ein neues UI-Textobjekt zu erstellen.
  • Benennen Sie das UI-Text-Objekt um in "DialogueText."
  • Erstellen Sie auf ähnliche Weise drei UI-Button-Objekte: eines für Auswahl 1, eines für Auswahl 2 und eines für die Schaltfläche "Next" (zum Vorrücken des Dialogs).
  • Benennen Sie die Schaltflächen als "Choice1Button," "Choice2Button," bzw. "NextButton".
  • Positionieren Sie den UI-Text und die Schaltflächen entsprechend Ihrem bevorzugten Layout auf der Leinwand. Möglicherweise möchten Sie den UI-Text in der Mitte des Bildschirms und die Schaltflächen unterhalb des Textfelds platzieren.
  • Passen Sie Schriftart, Größe, Farbe und andere Eigenschaften des UI-Texts an den visuellen Stil Ihres Spiels an.
  • Passen Sie das Erscheinungsbild der UI-Schaltflächen an, indem Sie beispielsweise deren Farben und Textbeschriftungen ändern.
  • Wählen Sie im Unity-Editor das GameObject "DialogueManager" aus (dasjenige, das Sie erstellt haben, um das Skript anzuhängen).
  • Im Inspektorfenster sehen Sie die Skriptkomponente "Dialogue Manager". Ziehen Sie die UI-Text- und Button-Objekte per Drag-and-Drop aus dem Hierarchiefenster in die entsprechenden öffentlichen Felder in der Skriptkomponente.
  • Durch Zuweisen dieser Referenzen kann das DialogueManager-Skript auf den UI-Text und die Schaltflächen in der Szene zugreifen und so den Textinhalt aktualisieren und deren Sichtbarkeit nach Bedarf während des Dialogs steuern.
  • Speichern Sie die Szene, um die Variablenänderungen zu speichern.

Beim Ausführen des Spiels oder bei der Interaktion mit den Dialogauslösern sollte der DialogueManager in der Lage sein, den Dialogtext und die Auswahlmöglichkeiten mithilfe der referenzierten UI-Elemente auf der Leinwand anzuzeigen.

Abschluss

Ein effektives Dialogsystem in Spielen verleiht den Spielern Entscheidungsfreiheit, Wirkung und ein Gefühl der Beteiligung an der virtuellen Welt und macht das Spielerlebnis reicher und ansprechender. Da Spielerzählungen und interaktives Geschichtenerzählen immer ausgefeilter werden, spielen Dialogsysteme eine immer wichtigere Rolle bei der Gestaltung der Reise des Spielers und der Schaffung unvergesslicher Spielerlebnisse.

Empfohlene Artikel
Hubschrauber-Controller für Unity
Auto-Controller für Unity
Charakter-Controller So fügen Sie die Fähigkeit hinzu, starre Körper in Einheit zu schieben
Flugzeugcontroller für Unity
Spieler-3D- und 2D-Wandsprung-Tutorial für Unity
Taschenlampen-Tutorial für Unity
Spielerbewegung in Einheit schaffen