Indholdsfortegnelse
Godot Dialogue Manager 3 med C#
Denne guide viser et simpelt eksempel af brug af Dialogue Manager 3 i Godot 4 med C#.
- Dialog Manager 3 - Dokumentation (its pretty good actually)
Installer Dialogue Manager 3
(easy peasy, japanesee)
- Åbn AssetLib i Godot
- Søg efter “Dialogue Manager 3”
- Installer plugin
- Gå til: Project → Project Settings → Plugins
- Aktivér pluginet (se nedenstående)
Opret en dialogfil
Indsæt følgende i filen:
~ start
NPC: Hej! Velkommen til [HTX|EUC Nord] 👋
- Hvem er du?
NPC: Jeg er skolens NPC.
=> END
- Farvel
NPC: Vi ses!
=> END
Begreber i ovenstående:
- Cues (labels)
- Dialogue Line
- Option
- Comment
- Jump END
- Random word
- Indentation (indryk/tabulering) - indrykning er vigtigt.. ligesom i Python
Gem filen. (opret en dedikeret folder til dine dialoger) som f.eks.:
res://dialogues/htx_dialog.dialogue
Test / Debugging af dialog
Dialog Manager Syntax
| Tegn | betydning |
|---|---|
| Martin : Dingo ate me baby! | Martin says : Dingo ate me baby! |
~ | Cues (Label) |
- | Option |
⇒ | Jump to cue/label |
⇒< | Jump to snippet, and return (sub-routine) |
[sayA|sayB|sayC] | Skifter tilfældig mellem sayA, sayB og sayC |
# | Kommentar |
Multiline
Man kan anvende multilines for at vise flere linjer dialog fra en enkelt NPC. Her bruger du enten '\n' til at adskille dem på en enkelt linje eller indryk hver yderligere linje.
Nathan: Prepare to duel me, coward!
I’ve studied the fine art of…
pointing a stick and looking angry.
Also, I’m really good at tripping over my own feet.
C# Script til at starte dialog
Tilføj først DialogManager som en Auto-load klasse.
Nu kan du henvise til den fra alle dine C# scripts.
Tilføj et C# i dit FileSystem:
using Godot; using System; using DialogueManagerRuntime; public partial class DialogueTrigger : Area2D { [Export] public Resource DialogueResource; [Export] public string DialogueStartLabel = "start"; //default er altid 'start' public override void _Ready() { base._Ready(); if (this.DialogueResource == null) { GD.Print("Error: You forgot to assign a dialogue resource.."); } } public void StartTheDialog() { DialogueManager.ShowDialogueBalloon(DialogueResource, DialogueStartLabel ); } public void OnBodyEnter(Node2D other) { if (other.Name == "Player") { this.StartTheDialog(); } } }
Forbind dialogen i Inspector
- Find feltet „Dialogue Resource“
- Træk din dialog ressource f.eks
htx_dialogue.dialogueind i feltet - Angiv evt. StartDialogLabel. (hvis den er forskellig fra
start)
Typiske fejl
| Fejl | Årsag |
|---|---|
| DialogueManager.Instance er null | Plugin ikke aktiveret |
| Intet sker | DialogueResource ikke sat |
| C# build fejl | .NET SDK mangler |
Random tekst
For at gøre dialogerne mindre ensformige kan vi indføre tilfældigheder i valget af linier & jumps i dialog scriptet.
Nathan: I will say this. % Nathan: And then I might say this % Nathan: Or maybe this % Nathan: Or even this?
Random ord-valg
Nathan: Hi there partner, i hope you have a [wonderful|awesome] day.
Random Jumps
Combining the randomized line syntax with the jump syntax to randomly jump to a pool of titles.
Nathan: I am feeling lucky. I am gonna choose a random jump :) % => first % => second % => third
Variable (global)
Opret en klasse du vil anvende som en global (Autoload).
using Godot; using System; public partial class MyGlobal : Node { public Boolean has_key = false; public int gold = 5; }
Tilføj dit script til Autoload, så det kan tilgåes fra alle scripts på tværs af scener.
Brug global variabel
Som en del af en dialog
Nathan : I have {{ MyGlobal.gold }} gold nuggets in me pocket..
I en betinget option
- Buy sword [if MyGlobal.gold >= 8] - Leave shop
- Buy option bliver 'ghosted' indtil guld når 8 eller mere.
Du kan også lave inline if/else statements, for fx. at få ental/flertal på plads ift. antal.
Nathan: I have {{MyGlobal.coins}} [if MyGlobal.coins == 1]coin[else]coins[/if], which is nice!
Interaktion med C# kode
| Tegn | betydning |
|---|---|
do zelda.LookDown | Kalder funktion LookDown() på 'zelda' objekt |
set State.hasAble = true | ændrer propertie i State klasse |




