Unity State Machine-Architektur zum Organisieren von Einheitenverhalten

Die erste Phase in der Entwicklung meines Spiels war die Entwicklung der RTS-Engine. Ich plane, eine Reihe von Beiträgen über die aufgetretenen Probleme und deren Lösungen in diesem Blog zu schreiben. In diesem Beitrag werde ich Ihnen erzählen, wie ich das Verhalten von Einheiten organisiert habe.

Als ich darüber nachdachte, wo ich diese RTS-Engine im Allgemeinen starten sollte, kam ich zu dem Schluss, dass es sich lohnt, mit Einzelheiten zu beginnen und von dieser zur Abstraktion überzugehen. Die erste Anwendung, die mir in den Sinn kam, war das Sammeln von Ressourcen oder vielmehr die Gewinnung von Holz.

Normalerweise besteht dieser Prozess in den meisten Strategien darin, dass der Mitarbeiter nach Erhalt des Dekrets zum Fällen des Baumes zum Baum geht, einige Zeit mit einer Axt eine Spitzhacke in seiner Nähe schwenkt, dann zum Lager geht und von vorne beginnt.

Das heißt, der Prozess sieht ungefähr so ​​aus:

Bild

Damit dieses Bild wirklich den Namen des Automaten beanspruchen kann, fehlen die Bedingungen für Übergänge zwischen Zuständen und dem Anfangs- und Endzustand.

Hier ist alles einfach: Die Maschine wird mit dem Status „Ich werde hacken“ initialisiert, und das Ende der Arbeit erfolgt während des Wechsels. Wir können die Übergänge zwischen Staaten unter folgenden Bedingungen ausdrücken: „den Baum erreicht“, „einen vollen Haufen Brennholz gehackt“, „das Lager erreicht“, „Ressourcen abgegeben“. Wenn die Antwort Ja lautet, wechselt die Maschine in den nächsten Zustand. Wenn sie negativ ist, bleibt sie im aktuellen Zustand.

Bild

In jedem der Zustände des Automaten wird die entsprechende Aktion während der Iteration aufgerufen. Während des Übergangs zwischen Zuständen kann auch eine Reihe von Aktionen ausgeführt werden.

Wenn Sie beispielsweise im Status "Übergabe" iterieren, werden die Ressourcen aus dem Rucksack der Einheit in den Ressourcenspeicher des Spielers übertragen. Wenn Sie vom Status "Zum Hacken gehen" in den Status "Rubel" wechseln, wird die entsprechende Animation gestartet.

Ich stelle auch fest, dass das Gehen selbst keine „atomare“ Operation ist, sondern in vielen Verhaltensweisen vorkommt und selbst ein Verhalten ist. Daher nutzt das Verhalten der Baumextraktion tatsächlich das Verhalten des Gehens in sich selbst. Das heißt, ein neuer Automat kann unter Verwendung der Zusammensetzung mehrerer anderer endlicher Automaten erhalten werden.

Bild

Durch das Schreiben der Verhaltensweisen auf diese Weise erhalten wir eine architektonische Grenze zwischen den Details der Implementierung der Verhaltensweisen und der allgemeinen Richtlinie zum Verwalten dieser Verhaltensweisen. Implementierungen von Verhaltensweisen werden im Wesentlichen zu Plug-Ins für den Rest des Spiels, dh Änderungen an ihnen wirken sich nicht auf die Richtigkeit der Arbeit der Logik auf hoher Ebene aus.

Diese Verhaltensweisen funktionieren durch Aufrufen der Iterationsmethode aus dem Update-Ereignis von Objekten vom Typ Unit (dieses Ereignis löst jeden Frame aus). Um mit dem Rest der Welt zu kommunizieren, werden IStateMachineListener-Methoden aufgerufen.

Dies ist ein Beispiel für eine Zustandsmaschinenkonstruktion in meinem Spiel. Nach Erhalt eines Bauteams geht die Einheit zum angegebenen Punkt und wechselt dann in den Zustand der direkten Konstruktion, wobei die Gebäudeeinheiten in das Gebäude übertragen werden. Wenn das Gebäude genügend Baueinheiten angesammelt hat, endet die Baumaschine und die Einheit erhält ein neues Verhalten, das Standardverhalten.


Das ist alles Wenn Sie dieses Format mögen oder nicht mögen, dann schreiben Sie darüber in den Kommentaren!

Source: https://habr.com/ru/post/de454402/


All Articles