<aside> 💡 Behaviour Tree
</aside>
“수중의 지닌 돈과 기분에 따라 주변 자판기에서 음료 구입하기” - Behavior Tree
Behaviour Tree는 게임 AI에서 널리 사용되는 설계 패턴으로, NPC의 행동을 계층적으로 관리하고 제어하기 위해 사용된다. 트리 형태로 구성되어 복잡한 행동을 단순하고 이해하기 쉽게 표현 가능하다.
<aside> 💡
Behavior Tree의 기본 구조
</aside>
public enum NodeState
{
RUNNING,
SUCCESS,
FAILURE,
}
public abstract class Node
{
protected NodeState state;
public NodeState State => state;
public abstract NodeState Evaluate();
}
NodeState 열거형은 노드의 상태를 나타냄.
Node는 모든 노드의 기본 클래스이며, Evaluate 메서드를 통해서 상태를 평가함.
public class Sequence : Node
{
private List<Node> nodes = new List<Node>();
public Sequence(List<Node> nodes)
{
this.nodes = nodes;
}
public override NodeState Evaluate()
{
bool anyChildRunning = false;
foreach (Node node in nodes)
{
switch (node.Evaluate())
{
case NodeState.FAILURE:
state = NodeState.FAILURE;
return state;
case NodeState.SUCCESS:
continue;
case NodeState.RUNNING:
anyChildRunning = true;
continue;
default:
state = NodeState.SUCCESS;
return state;
}
}
state = anyChildRunning ? NodeState.RUNNING : NodeState.SUCCESS;
return state;
}
}