Opprette et dialogsystem i Godot med GDScript

I spillutvikling er engasjerende spilling og fengslende historiefortelling nøkkelen til å skape minneverdige opplevelser. Et kraftig verktøy som kan hjelpe deg å oppnå dette er et dialogsystem.

Med et godt implementert dialogsystem kan karakterer kommunisere, dele informasjon og samhandle med spilleren, og legge til dybde og innlevelse i spillet ditt.

Sette opp Godot-spillet ditt

Start med å lage grunnlaget for spillet ditt. For dette eksemplet, sett opp et enkelt 2D-miljø med en kontrollerbar karakter som kan bevege seg rundt ved hjelp av piltastene.

Koden som brukes i denne artikkelen er tilgjengelig i denne GitHub-depot og er gratis for deg å bruke under MIT-lisensen.

Begynn med å lage en ny scene for spillerkarakteren din. Inne i denne scenen legger du til de nødvendige komponentene. Lag en CharacterBody2D-node for å representere spillerkarakterens kropp. Fest en CollisionShape2D med rektangulær form for å definere spillerens kollisjonsområde.

Legg nå til karakterbevegelse og interaksjon med plattformer ved hjelp av GDScript. Erstatt standardskriptet til CharacterBody2D-noden med følgende kode:

 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)

Dette skriptet lar karakteren din bevege seg til venstre, høyre, opp og ned basert på piltastene. Move_and_collide-funksjonen sørger for at karakteren samhandler med plattformer og reagerer på kollisjoner.

  Musiex legger til et bevegelsesbasert banner med kontroller for å spille musikk [Jailbreak]

Legger til dialogboksen

Nå kan du begynne å lage dialogsystemet. Det første trinnet er å legge til en dialogboks som viser tekst når karakteren din samhandler med spesifikke objekter eller NPC-er.

I CharacterBody2D-skriptet ditt, introduser noen flere variabler for å håndtere dialogboksen og dens innhold:

 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

Dialogboksen vil være ansvarlig for å vise dialogteksten, mens close_button vil tillate spillere å lukke dialogboksen ved behov.

I _ready-funksjonen oppretter og initialiser dialogboksen:

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

Viser dialogtekst

Nå kan du fokusere på å vise teksten i dialogboksen. Du kan få teksten til å spenne over mer enn én linje og bla i den, og avsløre én tekstlinje om gangen.

Endre _physics_process-funksjonen din for å håndtere visningen av dialoglinjer:

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

Dette kodesegmentet sjekker om line_timer er større enn 0. Hvis det er det, reduserer det timeren med deltaverdien. Hvis tidtakeren ikke er aktiv, og det er flere dialoglinjer å vise, kaller den opp funksjonen show_next_dialogue_line.

Implementer funksjonen show_next_dialogue_line som følger:

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

   
    line_timer = 3.0

Denne funksjonen oppdaterer teksten i dialogboksen med gjeldende dialoglinje og øker gjeldende_linjeindeksen. Line_timeren sørger for at hver linje vises i en kort periode før den går videre til neste linje.

  Alt du trenger å vite

Legger til en lukkeknapp

Nå kan du gi spillerne muligheten til å lukke dialogboksen og fortsette å spille spillet. Gjør dette med en lukkeknapp som, når de trykker på den, skjuler dialogboksen og lar spilleren fortsette reisen.

Først, endre _ready-funksjonen for å lage en lukkeknapp og legge til funksjonaliteten.

 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)

Denne koden lager en forekomst av Button-klassen og tilpasser utseendet og plasseringen. Den kobler også det trykket signalet til funksjonen _på_lukke_knapp_trykket.

Implementer nå funksjonen _on_close_button_pressed. I denne funksjonen setter du synligheten til både dialogboksen og lukkeknappen til usann. Dette skjuler effektivt dialoggrensesnittet for spilleren.

Husk å tilbakestille current_line-indeksen til 0 for å sikre at dialogen starter fra begynnelsen neste gang spilleren starter en samtale:

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

Med disse endringene vil spillere kunne gå i dialog og lukke dialogboksen når de er klare til å fortsette å utforske eller samhandle med spillverdenen.

Beste praksis for ditt dialogsystem

Når du fortsetter å utvikle og avgrense dialogsystemet ditt, vil det å ha følgende beste fremgangsmåter i bakhodet bidra til å sikre at systemet ditt forbedrer spillets historiefortelling og spillerengasjement i størst mulig grad.

Konsistens er nøkkelen

Oppretthold en konsekvent tone, skrivestil og vokabular gjennom hele dialogsystemet. Konsistens hjelper spillere med å få kontakt med karakterer og spillverdenen, og skaper en sømløs og oppslukende opplevelse.

  6 beste tale-til-tekst API for dine moderne applikasjoner

Lag karakterstemmer

Hver karakter bør ha en distinkt stemme og personlighet som gjenspeiles i deres dialoger. Vurder deres bakgrunn, motivasjon og følelser når du skriver replikkene.

Denne differensieringen gir dybde til karakterene dine og gjør interaksjoner mer minneverdige. Du kan enkelt legge til forskjellige lyder for forskjellige karakterer i Godot.

Meningsfulle valg

Utforme dialogvalg som har meningsfulle konsekvenser. Valg som påvirker spillets narrativ, relasjoner eller til og med spillmekanikk oppmuntrer spillere til å engasjere seg i dialogsystemet og investere følelsesmessig i beslutningene sine.

Testing og iterasjon

Test dialogsekvensene dine grundig for å fange eventuelle skrivefeil, grammatiske feil eller tempoproblemer. Delta i playtesting for å samle tilbakemeldinger fra spillere og foreta nødvendige justeringer for å sikre at dialogsystemet flyter jevnt og forbedrer den generelle spillopplevelsen.

UI-konsistens

Sørg for at utformingen og presentasjonen av dialogsystemet samsvarer med det generelle brukergrensesnittet (UI) til spillet ditt. Konsekvente UI-elementer, fonter og farger skaper en sammenhengende visuell opplevelse som bidrar til spillets fordypning.

Ved å følge disse beste fremgangsmåtene kan du lage et dialogsystem som ikke bare forbedrer spillets narrativ, men også skaper en minneverdig og oppslukende opplevelse for spillere.

Oppgrader Godot-spillene dine med dialogsystemer

Å inkludere et dialogsystem i Godot-spillene dine kan forbedre spillerengasjementet og revolusjonere historiefortellingen din. Ved å gjøre det mulig for karakterer å kommunisere, uttrykke følelser og reagere på spillerbeslutninger, skaper du en mer oppslukende og interaktiv spillverden.

Med Godots brukervennlige miljø og kraften til GDScript har du verktøyene til å lage overbevisende dialogsystemer som trekker spillere inn i fortellingen din og forbedrer deres generelle spillopplevelse.