Skapa ett dialogsystem i Godot med GDScript

Inom spelutveckling är engagerande spel och fängslande berättande nyckeln till att skapa minnesvärda upplevelser. Ett kraftfullt verktyg som kan hjälpa dig att uppnå detta är ett dialogsystem.

Med ett välimplementerat dialogsystem kan karaktärer kommunicera, dela information och interagera med spelaren, vilket ger djup och fördjupning till ditt spel.

Konfigurera ditt Godot-spel

Börja med att skapa grunden för ditt spel. För det här exemplet, skapa en enkel 2D-miljö med en kontrollerbar karaktär som kan flytta runt med hjälp av piltangenterna.

Koden som används i den här artikeln är tillgänglig i denna GitHub-förråd och är gratis för dig att använda under MIT-licensen.

Börja med att skapa en ny scen för din spelarkaraktär. Lägg till de nödvändiga komponenterna i den här scenen. Skapa en CharacterBody2D-nod för att representera spelarkaraktärens kropp. Fäst en CollisionShape2D med en rektangulär form för att definiera spelarens kollisionsområde.

Lägg nu till karaktärsrörelse och interaktion med plattformar med GDScript. Ersätt standardskriptet för CharacterBody2D-noden med följande kod:

 extends CharacterBody2D

var speed = 300

func _physics_process(delta):
    var input_dir = Vector2.ZERO

    if Input.is_action_pressed("ui_left"):
        input_dir.x -= 1

    if Input.is_action_pressed("ui_right"):
        input_dir.x += 1

    if Input.is_action_pressed("ui_up"):
        input_dir.y -= 1

    if Input.is_action_pressed("ui_down"):
        input_dir.y += 1

    velocity = input_dir.normalized() * speed
    move_and_collide(velocity * delta)

Det här skriptet låter din karaktär flytta sig åt vänster, höger, upp och ner baserat på piltangenterna. Funktionen move_and_collide ser till att karaktären interagerar med plattformar och reagerar på kollisioner.

Lägger till dialogrutan

Nu kan du börja skapa dialogsystemet. Det första steget är att lägga till en dialogruta som visar text när din karaktär interagerar med specifika objekt eller NPC:er.

I ditt CharacterBody2D-skript, introducera några fler variabler för att hantera dialogrutan och dess innehåll:

 var dialogue_box: Label
var close_button: Button
var dialogue_lines: Array = ["Hello, adventurer!", "Welcome to our village."]

var current_line: int = 0
var line_timer: float = 0

Dialogrutan kommer att vara ansvarig för att visa dialogtexten, medan close_button låter spelare stänga dialogrutan när det behövs.

Skapa och initiera dialogrutan i _ready-funktionen:

 func _ready():
    dialogue_box = Label.new()
    dialogue_box.visible = false
    add_child(dialogue_box)

Visar dialogtext

Nu kan du fokusera på att visa texten i dialogrutan. Du kan få texten att sträcka sig över mer än en rad och rulla den så att en rad text i taget visas.

Ändra din _physics_process-funktion för att hantera visningen av dialoglinjer:

 if line_timer > 0:
    line_timer -= delta
elif current_line < dialogue_lines.size():
    show_next_dialogue_line()

Detta kodsegment kontrollerar om line_timer är större än 0. Om så är fallet minskar det timern med deltavärdet. Om timern inte är aktiv och det finns fler dialograder att visa, anropar den funktionen show_next_dialogue_line.

Implementera funktionen show_next_dialogue_line enligt följande:

 func show_next_dialogue_line():
    dialogue_box.text = dialogue_lines[current_line]
    current_line += 1

   
    line_timer = 3.0

Denna funktion uppdaterar texten i dialogrutan med den aktuella dialograden och ökar indexet current_line. Line_timer ser till att varje rad visas under en kort period innan den går vidare till nästa rad.

Lägga till en stängningsknapp

Nu kan du ge spelare möjligheten att stänga dialogrutan och fortsätta spela spelet. Gör detta med en stängningsknapp som, när de trycker på den, döljer dialogrutan och låter spelaren fortsätta sin resa.

Ändra först funktionen _ready för att skapa en stängningsknapp och bifoga dess funktionalitet.

 func _ready():
    dialogue_box = Label.new()
    dialogue_box.visible = false
    add_child(dialogue_box)

    close_button = Button.new()
    close_button.text = "Close"
    close_button.position = Vector2(50, 30)
    close_button.visible = false
    close_button.pressed.connect(_on_close_button_pressed)
    add_child(close_button)

Den här koden skapar en instans av Button-klassen och anpassar dess utseende och position. Den kopplar också den nedtryckta signalen till funktionen _on_close_button_pressed.

Implementera nu funktionen _on_close_button_pressed. I den här funktionen ställer du in synligheten för både dialogrutan och stängningsknappen till false. Detta döljer effektivt dialoggränssnittet för spelaren.

Kom ihåg att återställa indexet current_line till 0 för att säkerställa att dialogen startar från början nästa gång spelaren startar en konversation:

 func _on_close_button_pressed():
    dialogue_box.visible = false
    close_button.visible = false
    current_line = 0

Med dessa ändringar kommer spelare att kunna gå i dialog och stänga dialogrutan när de är redo att fortsätta utforska eller interagera med spelvärlden.

Bästa praxis för ditt dialogsystem

När du fortsätter att utveckla och förfina ditt dialogsystem, kommer du att ha följande bästa praxis i åtanke för att säkerställa att ditt system förbättrar ditt spels storytelling och spelarengagemang i största möjliga utsträckning.

Konsekvens är nyckeln

Upprätthåll en konsekvent ton, skrivstil och ordförråd genom hela ditt dialogsystem. Konsistens hjälper spelare att få kontakt med karaktärer och spelvärlden, vilket skapar en sömlös och uppslukande upplevelse.

Hantverk karaktärsröster

Varje karaktär bör ha en distinkt röst och personlighet som återspeglas i deras dialoger. Tänk på deras bakgrund, motiv och känslor när du skriver sina rader.

Denna differentiering ger djup till dina karaktärer och gör interaktioner mer minnesvärda. Du kan enkelt lägga till olika ljud för olika karaktärer i Godot.

Meningsfulla val

Designa dialogval som får meningsfulla konsekvenser. Val som påverkar spelets berättelse, relationer eller till och med spelmekanik uppmuntrar spelare att engagera sig i dialogsystemet och investera känslomässigt i sina beslut.

Testning och iteration

Testa dina dialogsekvenser noggrant för att fånga eventuella stavfel, grammatiska fel eller tempoproblem. Delta i speltestning för att samla feedback från spelare och göra nödvändiga justeringar för att säkerställa att dialogsystemet flyter smidigt och förbättrar den övergripande spelupplevelsen.

UI-konsistens

Se till att designen och presentationen av dialogsystemet matchar den övergripande designen för användargränssnittet i ditt spel. Konsekventa UI-element, typsnitt och färger skapar en sammanhängande visuell upplevelse som bidrar till spelets fördjupning.

Genom att följa dessa bästa metoder kan du skapa ett dialogsystem som inte bara förbättrar ditt spels berättelse utan också skapar en minnesvärd och uppslukande upplevelse för spelarna.

Lyft dina Godot-spel med dialogsystem

Att införliva ett dialogsystem i dina Godot-spel kan förbättra spelarens engagemang och revolutionera ditt berättande. Genom att göra det möjligt för karaktärer att kommunicera, uttrycka känslor och reagera på spelarbeslut skapar du en mer uppslukande och interaktiv spelvärld.

Med Godots användarvänliga miljö och kraften i GDScript har du verktygen för att skapa övertygande dialogsystem som drar in spelare i ditt narrativ och förbättrar deras övergripande spelupplevelse.