Conversation Tree Editor

Ein Dialogsystem-Tool für Unity

Dialoge wie in RPGs und Adventures


Wozu dieser Editor?

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.

Vorschau

Feature-Übersicht
  • Lineare und verschachtelte Dialoge
  • Konditionale Inhalte + Dialogführung
  • Kontextvariablenregister (Tags im Text, Scripting)


  • Aktionen auslösen
  • Service-Ansteuerung (z.B: Handel)
Wie sieht das in der Anwendung aus?

Beispiel-Dialog mitfür den Nutzer wählbaren Optionen

Technisches

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.

Anleitung

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.


Themenblöcke

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.

Themenblöcke werden ganz links angezeigt

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.

Jeder Themenblock hat seinen eigenen Kontext

Knoten / Dialogabschnitte / Gesprächsfetzen

Ist ein Block selektiert, werden seine Knoten angezeigt. Diese enthalten aufzusagenden Text und Anweisungen, was passieren soll. Zum Beispiel:

  • Gespräch endet
  • Zurück zum Standard-Thema
  • Springe zu bestimmtem Dialogteil
  • Biete Benutzer Dialogoptionen an
  • Führe Scripting-Aktion aus

So bearbeitet man Knoten (Gesprächsfetzen)

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.

Texte einfügen. Tags verwenden.

Optionen

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

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.

Einpassung in andere Projekte

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:

  • Lokalisierungsschnittstelle (Exists(), Get(), Add(), Remove())
  • GUI (Dialogbox)
  • Optional: Scripting (Konditionen und Aktionen)

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.