<aside> 💡 Behaviour Tree

</aside>

“수중의 지닌 돈과 기분에 따라 주변 자판기에서 음료 구입하기” -  Behavior Tree

“수중의 지닌 돈과 기분에 따라 주변 자판기에서 음료 구입하기” - Behavior Tree

Behaviour Tree는 게임 AI에서 널리 사용되는 설계 패턴으로, NPC의 행동을 계층적으로 관리하고 제어하기 위해 사용된다. 트리 형태로 구성되어 복잡한 행동을 단순하고 이해하기 쉽게 표현 가능하다.

<aside> 💡

Behavior Tree의 기본 구조

</aside>

코드로 구현

기본 Node 클래스 정의

public enum NodeState
{
		RUNNING,
		SUCCESS,
		FAILURE,
}

public abstract class Node
{
		protected NodeState state;
		
		public NodeState State => state;
		
		public abstract NodeState Evaluate();
}

NodeState 열거형은 노드의 상태를 나타냄.

Node는 모든 노드의 기본 클래스이며, Evaluate 메서드를 통해서 상태를 평가함.

Composite 노드 구현

Sequence 노드

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;				
		}
}