System dialogu na rzecz jedności

System dialogów w games ​​to mechanizm pozwalający na interaktywne i wciągające rozmowy pomiędzy graczem a postaciami w świecie gry. Służy jako kanał komunikacyjny, za pośrednictwem którego gracze mogą nawiązywać kontakt z postaciami niezależnymi (NPC) lub innymi podmiotami, zapewniając środki do opowiadania historii, postępów w misjach, rozwoju postaci i budowania świata.

Podstawowym celem systemu dialogów jest stworzenie dynamicznych i wciągających wrażeń dla graczy poprzez umożliwienie im dokonywania wyborów, wpływania na narrację gry i kształtowania ich relacji z postaciami w grze. Dobrze zaprojektowany system dialogów może zwiększyć immersję gracza, zaangażowanie emocjonalne i regrywalność.

Jeśli chodzi o tworzenie gier w Unity, utworzenie od podstaw pełnoprawnego systemu dialogów może być dość obszerne, ale można zacząć od uproszczonego przykładu. Poniższy przykład obejmie podstawowy system dialogów tekstowych wykorzystujący C# i system Unity UI. Pamiętaj, że to tylko punkt wyjścia, który można rozszerzyć i dostosować w zależności od konkretnych potrzeb.

Utwórz Menedżera Dialogu

  • Utwórz nowy skrypt, nadaj mu nazwę "DialogueManager" i wklej w nim poniższy kod:
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;
    }
}

Aby skonfigurować obiekty Tekst interfejsu użytkownika i Przycisk w Unity dla skryptu DialogueManager, wykonaj poniższe kroki:

  • W edytorze Unity kliknij prawym przyciskiem myszy okno Hierarchii i wybierz "UI -> Text", aby utworzyć nowy obiekt tekstowy interfejsu użytkownika.
  • Zmień nazwę obiektu tekstowego interfejsu użytkownika na "DialogueText."
  • Podobnie utwórz trzy obiekty przycisku interfejsu użytkownika: jeden dla opcji 1, jeden dla opcji 2 i jeden dla przycisku "Next" (w celu rozwijania dialogu).
  • Nazwij przyciski odpowiednio "Choice1Button," "Choice2Button," i "NextButton".
  • Umieść tekst interfejsu użytkownika i przyciski na płótnie zgodnie z preferowanym układem. Możesz umieścić tekst interfejsu użytkownika na środku ekranu, a przyciski poniżej pola tekstowego.
  • Dostosuj czcionkę, rozmiar, kolor i inne właściwości tekstu interfejsu użytkownika, aby dopasować je do stylu wizualnego gry.
  • Dostosuj wygląd przycisków interfejsu użytkownika, na przykład zmieniając ich kolory i etykiety tekstowe.
  • W edytorze Unity wybierz "DialogueManager" GameObject (ten, który utworzyłeś w celu dołączenia skryptu).
  • W oknie Inspektora zobaczysz komponent skryptu "Dialogue Manager". Przeciągnij i upuść obiekty Tekst i Przycisk interfejsu użytkownika z okna Hierarchia do odpowiednich pól publicznych w komponencie skryptu.
  • Przypisując te odniesienia, skrypt DialogueManager może uzyskać dostęp do tekstu interfejsu użytkownika i przycisków w scenie, umożliwiając mu aktualizację zawartości tekstu i kontrolowanie ich widoczności w razie potrzeby podczas dialogu.
  • Zapisz scenę, aby zapisać zmiany zmiennych.

Podczas uruchamiania gry lub interakcji z wyzwalaczami dialogu DialogueManager powinien być w stanie wyświetlić tekst dialogu i opcje, korzystając z odnośnych elementów interfejsu użytkownika na kanwie.

Wniosek

Efektywny system dialogów w grach zapewnia graczom sprawczość, wpływ i poczucie zaangażowania w wirtualny świat, dzięki czemu wrażenia z gry są bogatsze i bardziej wciągające. W miarę jak narracja w grach i interaktywne opowiadanie historii stają się coraz bardziej wyrafinowane, systemy dialogów odgrywają coraz ważniejszą rolę w kształtowaniu podróży gracza i tworzeniu niezapomnianych wrażeń z gry.

Sugerowane artykuły
Jak sterować dźwigiem w Unity
Kontroler postaci Jak dodać możliwość pchania sztywnych ciał w jedności
Tworzenie ruchu gracza w jedności
Kontroler odtwarzacza RTS i MOBA dla Unity
Kontroler helikoptera dla Unity
Dodanie obsługi podwójnego skoku do kontrolera postaci platformówki 2D w Unity
Kontroler samochodowy dla Unity