행동 트리 (Behaviour Tree) 에 대해 설명해주세요.
행동 트리 (Behaviour Tree)
- 캐릭터의 행동을 제어하기 위한 규칙으로 구성된 트리
- 루트에서 부터 시작해 현재 조건에 맞는 행동을 결정
주요 구성 요소
1. 컴포지트 노드 (Composite Nodes)
- Sequence (순서): 자식 노드를 왼쪽에서 오른쪽 순서로 실행합니다. 모든 자식 노드가 성공해야 자신도 성공(Success)을 반환합니다. 하나라도 실패(Failure)하면 즉시 자신도 실패를 반환하고 멈춥니다. (AND 논리와 유사)
- Selector (선택자): 자식 노드를 왼쪽에서 오른쪽 순서로 실행합니다. 하나라도 성공하면 즉시 자신도 성공을 반환하고 멈춥니다. 모든 자식 노드가 실패해야 자신도 실패를 반환합니다. (OR 논리와 유사)
- Parallel (병렬): 모든 자식 노드를 동시에 실행합니다. 특정 조건(예: n개 이상 성공 시 성공)에 따라 결과를 반환합니다.
2. 데코레이터 노드 (Decorator Nodes)
- 하나의 자식 노드를 가지며, 자식 노드의 실행 결과를 변경하거나 반복 실행하는 등의 추가 기능을 부여합니다.
예: 조건부(Conditional) 노드 (특정 조건이 만족될 때만 자식 실행), 반복(Repeater) 노드 (자식 노드를 여러 번 실행), 반전(Inverter) 노드 (자식 노드의 성공/실패 결과를 반전) 등.
Conditional Aborts와 같은 기능도 데코레이터나 컴포지트 노드의 속성으로 구현될 수 있습니다
리프 노드 (Leaf Nodes)
- 더 이상 자식 노드를 가지지 않는 맨 끝 노드입니다. 실제 행동을 수행하거나 상태를 확인하는 역할을 합니다.
- Action 노드: 특정 행동(예: 이동, 공격, 대기)을 수행합니다. 행동이 완료되면 성공 또는 실패를 반환합니다.
- Condition 노드: 특정 조건(예: 적이 보이는가?, 체력이 낮은가?)을 확인하고, 조건 만족 시 성공, 아니면 실패를 반환합니다.
장단점
- 트리를 구성하는 노드의 조합을 통해 다양한 행동을 구현할 수 있음
- 또한 각각의 노드가 행동 조건과 실제 행동을 포함하기 때문에 행동 패턴을 직관적이게 파악할 수 있음
- 그러나 지나치게 복잡한 행동 트리는 최적화에 불리하고, 오히려 직관성을 해칠 수 있음