Articles

Finite State Machines [Teil 1] – Unity Development Resources from TKoU

Finite State Machines sind etwas, das alle Entwickler in den wenigen Jahren, in denen sie mit der Spieleentwicklung in Unity beginnen, mindestens einmal gehört haben.

Was ist eine Finite State Machine überhaupt? Nun, da gibt es eine Menge zu behandeln, weshalb wir mindestens 3 Teile machen werden. Im Grunde ist eine Finite State Machine (oder FSM) ein Entwurfsmuster, bei dem die Automatisierung ins Spiel kommt. Es wird häufig in KI-Implementierungen für bestimmte Verhaltensweisen verwendet. D.h.: Laufen, Angreifen, Leerlauf, etc. FSM kann auch in NPCs implementiert werden und ist am häufigsten in Open World RPGs anzutreffen.

fsm1Betrachten wir FSM als einen Überwacher:

Nun überprüft der Überwacher den Zustand einer KI. Je nach Zustand wird die KI darauf reagieren. Außerdem hängt es vom Typ der KI ab (ob sie fliegt, am Boden ist oder schwimmt), welche Aktion die KI ausführen wird. In diesem Szenario teilt die FSM der KI mit, dass sie sich im „Patrouillenzustand“ befindet, und sagt der KI, sie solle „von A nach B laufen“. Solange es keine Zustandsänderung gibt, wird die KI nur von A nach B gehen.

fsm2

Um den Zustand zu ändern, müssen wir zuerst eine Bedingung haben. In dem Bild links sieht die KI den Spieler und sagt es dem Aufseher. Nun wird der Aufseher den Zustand der KI ändern und angreifen.

1ZmLLoS1bAl71Ea_BNZzHWaja5YsjvqLa2z-ubNYAuch hier beginnt die KI wieder zu patrouillieren, da der Spieler nicht in ihrer Sichtlinie ist.

Wie man in diesen schlecht gemachten Zeichnungen sieht, hat jeder Zustand seine Bedingungen, bevor er in andere Zustände übergeht.

Schauen wir uns das Diagramm unten an.

sNz-b43jHw-bZzuRbNlrvHQ

Hier ist ein Diagramm der Zustände einer normalen KI. Die roten Linien zeigen an, dass die Bedingung, die für einen Zustandswechsel erforderlich ist, falsch ist. Das Diagramm ist ziemlich einfach. Die KI befindet sich im Leerlauf, wenn sie ihr Ziel erreicht, und umgekehrt. Wenn sie einen Feind sieht, wird sie angreifen. Das FSM behandelt nun alle Übergänge zwischen den Zuständen und hilft der KI, die für den jeweiligen Zustand verfügbare Aktion auszuführen.

Nun wollen wir unser FSM-System aufschlüsseln.

  • Haupt-FSM-System – Dies ist das System, das die Zustände der KI kontrolliert und prüft, ob die Bedingungen zwischen den Zuständen erfüllt sind. Die Haupt-FSM wird alle Zustände enthalten und wird die Ereignisaufrufe von den FSM-Aktionen behandeln.
  • FSM State – Dies bestimmt den aktuellen Zustand der KI und enthält alle Aktionen, die auf die KI gelegt werden.
  • FSM Action – Dies wird die Aktion sein, die die KI tun wird, wenn die KI in einem bestimmten Zustand ist.

Nun, wie werden wir es tun? Lassen Sie uns alles aufzeichnen.

sV8-Gi7zqfM4YoWEXA-SCGw

Dies wird die Schleife unseres FSM sein. Zuerst initialisieren wir das FSM, erstellen Zustände, erstellen Aktionen und ordnen sie alle zusammen zu. Nachdem wir sie gemappt haben, starten wir den FSM und geben den Zustand an, in dem die KI starten wird. Nun wechselt die KI in einen bestimmten Zustand, und der FSM initialisiert die Aktion, aktualisiert sie, bis die Aktion beendet ist, und sendet ein Ereignis, das anzeigt, dass die Aktion beendet ist. Schließlich geht die FSM zurück und ändert den Zustand.

Eine andere Sache, die eine Zustandsänderung verursacht, ist, wenn ein Ereignis außerhalb der Logik der KI aufgerufen wird. Zum Beispiel, wenn wir einen Kommandanten erstellen und allen Soldaten befehlen, sich nicht mehr zu bewegen.

Damit endet der erste Teil unseres FSM-Tutorials. Ich hoffe, dass ich Ihnen FSM gut erklärt habe. Wenn du es immer noch nicht verstehst, musst du wahrscheinlich erst alles in Aktion sehen und selbst scannen. So habe ich es gelernt.
Im nächsten Teil werden wir zunächst wieder einige einfache FSM-Implementierungen aus dem wirklichen Leben besprechen, und wir werden damit beginnen, unsere ganze FSM-Engine von Grund auf zu skripten!