Dialogsystem for enhet

Et dialogsystem i games ​​er en mekanisme som gir mulighet for interaktive og oppslukende samtaler mellom spilleren og karakterene i spillverdenen. Den fungerer som en kommunikasjonskanal der spillere kan engasjere seg med ikke-spillerkarakterer (NPC) eller andre enheter, og gir et middel for historiefortelling, oppdragsprogresjon, karakterutvikling og verdensbygging.

Hovedmålet med et dialogsystem er å skape en dynamisk og engasjerende opplevelse for spillere ved å sette dem i stand til å ta valg, påvirke spillets fortelling og forme deres forhold til karakterer i spillet. Et godt designet dialogsystem kan forbedre spillerens fordypning, emosjonelle investeringer og gjenspillbarhet.

Når det kommer til spillutvikling i Unity, kan det være ganske omfattende å lage et fullverdig dialogsystem fra bunnen av, men det er mulig å starte med et forenklet eksempel for å komme i gang. Eksemplet nedenfor vil dekke et grunnleggende tekstbasert dialogsystem som bruker C# og Unity UI-systemet. Husk at dette kun er et utgangspunkt, og kan utvides og tilpasses ut fra de spesifikke behovene.

Opprett dialogbehandleren

  • Lag et nytt skript, kall det "DialogueManager", og lim deretter inn koden nedenfor i det:
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;
    }
}

For å sette opp UI Text and Button-objektene i Unity for DialogueManager-skriptet, følg trinnene nedenfor:

  • I Unity-editoren høyreklikker du i Hierarchy-vinduet og velger "UI -> Text" for å lage et nytt UI Text-objekt.
  • Gi nytt navn til UI Text-objektet til "DialogueText."
  • På samme måte oppretter du tre UI Button-objekter: ett for valg 1, ett for valg 2 og ett for "Next"-knappen (for å fremme dialogen).
  • Navngi knappene som henholdsvis "Choice1Button," "Choice2Button," og "NextButton".
  • Plasser UI-teksten og -knappene på lerretet i henhold til din foretrukne layout. Du vil kanskje plassere UI-teksten i midten av skjermen og knappene under tekstboksen.
  • Juster tekstfonten, størrelsen, fargen og andre egenskaper til UI-teksten for å passe spillets visuelle stil.
  • Tilpass utseendet til UI-knappene, for eksempel å endre farger og tekstetiketter.
  • I Unity-editoren velger du "DialogueManager" GameObject (det du opprettet for å feste skriptet).
  • I Inspector-vinduet vil du se "Dialogue Manager"-skriptkomponenten. Dra og slipp UI-tekst- og knappobjektene fra hierarkivinduet til de tilsvarende offentlige feltene i skriptkomponenten.
  • Ved å tilordne disse referansene kan DialogueManager-skriptet få tilgang til UI-teksten og -knappene i scenen, slik at det kan oppdatere tekstinnholdet og kontrollere deres synlighet etter behov under dialogen.
  • Lagre scenen for å lagre variabelendringene.

Når du kjører spillet eller samhandler med dialogutløserne, skal DialogueManager kunne vise dialogteksten og valgene ved å bruke de refererte UI-elementene på lerretet.

Konklusjon

Et effektivt dialogsystem i spill gir spillerne handlefrihet, innflytelse og en følelse av involvering i den virtuelle verdenen, noe som gjør spillopplevelsen rikere og mer engasjerende. Etter hvert som spillfortellinger og interaktiv historiefortelling blir mer sofistikert, spiller dialogsystemer en stadig viktigere rolle i å forme spillerens reise og skape minneverdige spillopplevelser.

Foreslåtte artikler
Helikopterkontrollør for Unity
Bilkontroller for Unity
Karakterkontroller Hvordan legge til evne til å skyve rigidbodies i enhet
Flykontroller for Unity
Player 3D og 2D Wall Jump Tutorial for Unity
Lommelyktopplæring for Unity
3D Worm Controller-veiledning for Unity