Adventure Creator – Wie man Objectives für ein einfaches Quest-System verwendet

Objectives im Adventure Creator werden verwendet, um für den Spieler Ziele zu definieren, verschiedene Zustände auf dem Weg dahin und das dem Spieler anzuzeigen. Man kann das System aber auch für ein einfaches Quest-System verwenden. Wir zeigen wie.

Was ist der Adventure Creator?
Der Adventure Creator (kurz AC) ist ein Plugin für die Unity-Engine, mit dem man rein visuell im Unity-Editor ein komplettes (und komplexes) Spiel erstellen kann. Das Tool ist spezialisiert auf das Adventure-Genre, es lassen sich aber auch andere Genres und Spielmechaniken damit umsetzen. Zudem lässt es sich durch eigene Scripte erweitern.

Wo verwaltet man Objectives?

Objectives werden im AC Game Editor unter dem Inventory-Tab verwaltet.

Für ein Ziele (Objective) kann man beliebig viele Zustände festlegen. Für die Zustände gibt es aber nur 3 feste Zustands-Arten: Active, Complet, Fail.

Erzeugt man ein neues Objectives-Objekt, werden die zwei Standardzustände Started und Completed automatisch erzeugt.

Dabei ist Started fest vom State-Typ Active, Completed ist fest vom State-Typ Complete.

Legt man neue Zustände an, kann man zwischen den 3 Typen wählen.
Das werden wir uns später zu Nutze machen.

Verwendete Version:
Dieser Artikel bezieht sich auf Unity Version 2022.3.18f und Adventure Creator 1.79.3.

Das Standard-Szenario

Im Standard-Fall legen wir ein paar Ziele an, setzen diese in einen Zustand vom Typ Active und lassen sie uns in einem AC-Menü anzeigen.

Dazu wählt man den Element-Typ InventoryBox und dort den Inventory-Box-Typ Objectives.
Dort kann man nun wählen, welche State-Typen in der Liste dargestellt werden sollen (All, Active Only, Complete Only, Failed Only).

Initial stehen die Objectives in einem versteckten Zustand Inactive. Per Action können wir diese nun aktivieren.

Das Standard-Szenario ist nun folgendes:

  • Aktivieren der Ziele in einer ActionList
  • Darstellen aller oder der Aktiven Ziele
  • Erledigte Ziele per ActionList auf Completed setzen
  • Die erledigten Ziele werden nicht mehr angezeigt, wenn wir Active Only eingestellt haben
  • Die erledigten Ziele werden uns weiter angezeigt, wenn wir All eingestellt haben

Das Problem

Einmal aktivierte Objectives lassen sich nicht mehr auf inaktiv setzen, nur noch auf einen Status vom Typ Complete oder vom Typ Fail. Wir können nur alle Typen anzeigen lassen oder einzelne Typen, nicht aber so was wie „Active and Complete Only“.

Wenn wir uns alle Zustandstypen anzeigen lassen, können wir die abgeschlossenen im nächsten Chapter des Spiels nicht verschwinden lassen.

Lassen wir uns alle Zustandstypen anzeigen, sehen wir immer auch die Abgeschlossene, die Fehlgeschlagenen und die Inaktiven.
In diesem Beispiel ist das 3. noch inaktiv, das letzte abgeschlossen (Complete). Wir sehen immer alle.

Wenn wir uns nur die Aktiven anzeigen lassen, können wir uns keine Abgeschlossenen mehr darstellen lassen.

Lassen wir uns nur die Aktiven anzeigen, können wir die abgeschlossenen nicht abgehakt oder durchgestrichen darstellen.
In diesem Beispiel haben wir keine Möglichkeit, Abgeschlossene Quests abgehakt darzustellen

Was ist nun, wenn wir ein typisches Adventure Quest-System bauen wollen, in dem uns alle aktiven Quests und die erledigten Quests abgehakt oder durchgestrichen angezeigt werden. Zusätzlich wollen wir je nach Spielfortschritt alte Quests entfernen und neue Quests hinzufügen.

Das ist unser Ziel: Abgeschlossene Quests des aktuellen Kapitels abhaken, inaktive nicht anzeigen.

Da stoßen wir mit den Standard-Einstellungen an die Grenzen des Systems.

Die Lösung

Ein neuer Zustandstyp

Zunächst legen wir für alle Objectives einen neuen Zustand Done an. Als Typ wählen wir Active.

Nur Active Only darstellen

Im entsprechenden AC-Menü stellen wir ein, dass wir nur die Objectives mit aktiven Zuständen angezeigt bekommen.

Es werden nun alle Objektives dargestellt, die den Zustandstyp Active haben – also unser Standardzustand Started und unser neuer Zustand Done.

Zustände wechseln

Wollen wir, dass eine Quest dargestellt wird, setzen wir ihren Zustand auf Started.

Wird eine Quest abgeschlossen, setzen wir ihren Zustand auf Done. Sie wird weiterhin dargestellt.

Wollen wir die Quest nicht mehr sehen, setzen wir ihren Zustand auf Completed.

Quest abhaken

Jetzt wollen wir alle Objectives mit dem neuen Zustand Done besonders markiert darstellen – mit einem Haken dran.

Dazu bauen wir uns zunächst an jeden Button-Slot für das Objective im entsprechenden UI-Canvas eine Checkbox. In diesem Beispiel besteht diese aus einem Rahmen und Hintergrund für die Box und einem Image für den Haken.

Jetzt benötigen wir ein Component-Script, das wir an den Button hängen und in welchem wir die Zustände der Objectives prüfen und je nach Zustand den Haken setzen oder nicht.

public class QuestIcon : MonoBehaviour
{
	public int slot;
	public Image checkImage;

	void OnEnable ()
	{
		ObjectiveInstance[] objectives = KickStarter.runtimeObjectives.GetObjectives ();
		var activeObjectives = objectives.Where(x => x.CurrentState.stateType == ObjectiveStateType.Active).ToArray();

		if (slot >= 0 && slot < activeObjectives.Length)
		{
			if (activeObjectives[slot].CurrentState.Label == "Done" )
			{
				checkImage.enabled = true;
			}
			else
			{
				checkImage.enabled = false;
			}
		}
	}
}

Das Component-Script erwartet 2 Parameter: die ID des Slots und das Image mit dem Haken. Im Script holen wir uns das Objective der übergebenen Slot-ID aus dem Array aller aktiven Objectives.

An den Slot-Button adden wir die neue Component.

Dann setzen wir die Parameter.

Wenn wir jetzt den Play-Button drücken und ein paar Quests abschließen, sollten wir diese mit Häkchen dran dargestellt bekommen.

Ich hoffe wie immer, diese erstbeste Lösung für ein sicher sehr selten vorkommendes Nischen-Problem war hilfreich.


Quellen:

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert