In der Welt der Software- und Systementwicklung sind Verhaltensbäume eine formale, grafische Modellierungssprache, die hauptsächlich eingesetzt wird, um die Anforderungen von Stakeholdern für integrierte Softwaresysteme klar und eindeutig zu repräsentieren. Dieser umfassende Leitfaden führt durch die Schritte zur Erstellung eines Verhaltensbaums in Unity mithilfe von Scriptable Objects und dem UI Builder.
Einleitung
Ein Verhaltensbaum, erstellt mit Unity 2021.3.1f1 oder einer neueren Version, dient als Ausführungsbaum, der das Strategie-Muster verwendet und stets mit einem Wurzelknoten beginnt. Dieser Wurzelknoten hat nur ein Kind und markiert den Startpunkt des Verhaltensbaums. In diesem Artikel werden drei Haupttypen von Knoten behandelt: Decorator, Composite Node und Action Node.
Der Node
Um einen Verhaltensbaum zu erstellen, beginnen wir mit der Definition eines abstrakten Node-Typs als Scriptable Object. Jeder Knoten kann einen von drei Zuständen zurückgeben: Running, Success oder Failure. Die Implementierung umfasst abstrakte Methoden wie "Update" und "GetState", die von den spezifischen Knoten implementiert werden.
// Code-Beispiel für abstrakte Node-Klasse
public abstract class Node : ScriptableObject
{
public enum NodeState { Running, Success, Failure };
protected NodeState currentState;
protected bool hasStarted = false;
public abstract void Initialize();
public abstract NodeState UpdateNode();
}
Der Verhaltensbaum
Der Verhaltensbaum selbst wird als Scriptable Object erstellt und enthält den Wurzelknoten sowie den Gesamtzustand des Baums. Der Aktualisierungsmethode des Baums spiegelt die Zustandsänderungen der Knoten wider.
// Code-Beispiel für Behavior Tree-Klasse
[CreateAssetMenu(menuName = "Behavior Tree")]
public class BehaviorTree : ScriptableObject
{
public Node rootNode;
private NodeState treeState;
public NodeState UpdateTree()
{
if (rootNode == null)
{
treeState = NodeState.Failure;
}
else
{
if (rootNode.UpdateNode() == NodeState.Running)
{
rootNode.UpdateNode();
treeState = rootNode.currentState;
}
}
return treeState;
}
}
Node-Untertypen
Es werden drei Arten von Knoten behandelt: Decorator Node, Composite Node und Action Node. Decorator Nodes verwenden das Decorator-Muster und haben ein Kind, Composite Nodes haben eine Liste von Kindern und repräsentieren den Kontrollfluss des Verhaltensbaums. Action Nodes sind die Blätter des Baums und enthalten die eigentliche Logik.
// Code-Beispiel für Decorator Node
public abstract class DecoratorNode : Node
{
public Node childNode;
// ...
}
// Code-Beispiel für Composite Node
public abstract class CompositeNode : Node
{
public List<Node> childrenNodes;
// ...
}
// Code-Beispiel für Action Node
public abstract class ActionNode : Node
{
// ...
}
Praktische Anwendung
Um den Verhaltensbaum auszuführen, wird ein MonoBehaviour erstellt, das den Verhaltensbaum enthält. Dieses Beispiel verwendet einen Debug Log Node als Wurzelknoten. Durch die Integration von verschiedenen Knotentypen wie Repeat Node, Sequencer Node, Selector Node und Wait Node können komplexe Verhaltensbäume erstellt werden.
// Code-Beispiel für Behavior Tree Runner
public class BehaviorTreeRunner : MonoBehaviour
{
public BehaviorTree behaviorTree;
private void Start()
{
// Erstellen und Ausführen des Verhaltensbaums
behaviorTree.rootNode = CreateComplexBehaviorTree();
behaviorTree.UpdateTree();
}
// Methode zur Erstellung eines komplexen Verhaltensbaums
private Node CreateComplexBehaviorTree()
{
// ...
}
}
Fazit
Die Implementierung von Verhaltensbäumen in Unity ermöglicht die effektive Modellierung von komplexen Verhaltensweisen in Softwareprojekten. Dieser Leitfaden bietet einen umfassenden Einblick in die Erstellung von Verhaltensbäumen unter Verwendung von Scriptable Objects und dem UI Builder in Unity.
Mit diesem umfassenden Leitfaden zur Implementierung von Verhaltensbäumen in Unity bieten wir nicht nur einen praxisnahen Einblick in die Konzepte, sondern auch eine detaillierte Anleitung zur Anwendung in realen Projekten. Von der Definition von Nodes bis zur praktischen Anwendung in einem Behavior Tree Runner – dieser Leitfaden unterstützt Entwickler dabei, komplexe Verhaltensmuster effektiv zu modellieren und in ihre Projekte zu integrieren.