Ein Dialogsystem-Tool für Unity
Für das Unity-Spiel mit dem Arbeitstitel MageTrainee habe ich dieses Dialog-Editor in C# programmiert. Damit lassen sich RPG- bzw. Adventure-Dialoge realisieren.
Das Kernstück ist ein Bearbeitungsfenster innerhalb des Unity Editors, mit welchem man die Dialogstruktur, Textinhalte und ausführbare Aktionen bearbeiten kann.
Derzeit ist er noch nicht als PlugIn veröffentlicht. Bei Bedarf könnte das aber geschehen.
Beispiel-Dialog mitfür den Nutzer wählbaren Optionen
Mit dem ConversationTree Editor bearbeitet man nur den Inhalt der Dialoge. Die Anzeige, d.h. die Dialogbox, ist Sache der Implementierung.
Dieses Feature überschneidet sich mit den Bereichen Lokalisierung, GUI und Scripting, wofür ich auch eigene Lösungen entwickelt habe. Diese sind prinzipiell austauschbar. Durch die enge Verzahnung gerade im Bereich Scripting fallen Einpassungsarbeiten in das jeweilige Spiel an. Mehr dazu weiter unten.
Eine Konversationsbaum besteht hier aus 3 verschiedenen Ästen: Themenblöcke, Knoten und Optionen. Ein Konversationsbaum kann mehrere Themen beinhalten, ein Themenblock zergliedert sich wiederum in mehrere Knoten. Ein Knoten wiederum kann mehrere Optionen enthalten.
Eine Konversation unterteilt sich in Themenblöcke (blocks), welche zusammengehörige Dialogteile enthalten, z.B. zu einer Aufgabe/einem Quest oder einem bestimmten Gesprächsthema.
Das Hinzufügen, Verschieben, Umbenennen und Entfernen geht sehr leicht von der Hand.
Alle Gesprächsfetzen innerhalb eines Themenblockes teilen sich einen Kontext. Das ist nichts anderes als ein Variablenregister.
Bezieht man sich in Dialogabschnitten immer wieder auf einen Quest, einen Gegenstand, eine Gruppierung oder ähnliches, kann man diese einfach im Kontext verlinken und sich später einfach darauf beziehen.
Sinnvoll, wenn man viele Auswahlmöglichkeiten hat. Spart Zeit und kann helfen, Fehler zu vermeiden.
Ist ein Block selektiert, werden seine Knoten angezeigt. Diese enthalten aufzusagenden Text und Anweisungen, was passieren soll. Zum Beispiel:
Hier werden Gesprächsfetzen editiert. Standardmäßig spricht der Konversationspartner und nicht der Spielcharakter (Änderbar mittels Checkbox "Player talking").
Im Text können Tags platziert werden. [PLAYER_NAME] etwa wird ingame ersetzt durch den Namen der eigenen Spielfigur.
Hier werden entweder die Entscheidungen der AI oder Dialogoptionen der eigenen Spielfigur eingestellt.
Der Benutzer entscheidet anhand von auswählbaren Textzeilen in der GUI. Darum sind hier Texte eintragbar.
Target Node und Block bestimmen, mit welchem Dialogteil es weitergeht.
Bei AI-Entscheidungen werden mittels Konditionen Umgebungszustände überprüft. Dies ist eine Schnittstelle zum Scripting-System, welches für das Projekt sehr individuell sein kann.
Scripting meint in diesem Kontext Auslöser, Aktionen und Konditionen
Dialogoptionen können z.B. versteckt werden, wenn bestimmte Konditionen nicht eingetroffen sind.
Die gesamte Dialogführung kann von Konditionen bestimmt werden. Ein Beispiel: Kennt die Spielfigur den Gesprächspartner noch nicht, stellt sich dieser zunächst vor, bevor er zum Standarddialog übergeht.
Bestimmte Gesprächsabschnitte können es nötig machen, dass jenseits des Gespräches etwas passiert, etwa dass ein Quest abgeschlossen wird. Oder dass die Spielfigur einen Gegenstand erhält.
Dafür sind gescriptete Aktionen da, die man hier auswählen kann.
Bei Bedarf kann ich den jetzigen Code verallgemeinern und daraus ein Unity-PlugIn für andere Entwickler erstellen. Alternativ kann ich diese Softwarelösung für Ihr Produkt anpassen. Bei Interesse, nehmen Sie gerne Kontakt mit mir auf!
Die nötigen Schnittstellen ergeben sich in diesen Bereichen:
Solange dieses Tool noch nicht in ein PlugIn überführt ist, geht es möglicherweise schneller, ein bereits im Unity Marketplace veröffentlichtes PlugIn zu verwenden.