FSM 복습 (한계점) -> State 복습 (한계점) -> 코드 기반 BT (한계점) -> BT Graph - Unity 6
FSM
[기본구조]
switch(currentState)
{
case State.Idle:
// 동작
break;
case State.Move:
// 동작
break;
...
}
[ex]
상태(State)가 3개일때는?상태(State)가 10개 이상이라면?-> 상태(State)수가 늘수록 코드 복잡도 폭증
State Pattern 복습
[구조]
+상태(State)
"전이(Transition) 연결"
상태(State)가 많아질수록
상태(State) 들간 결합도가 커질 수 있음Behaviour Tree (BT)
상태(State)는 선택된 현재 상태(State)만 실행 -> 그 상태(State)가 가진 조건부 판별만함BT는 조건을 매 프레임 단위로 루트 노드에서부터 판단public enum NodeState { Success, Failure, Running }
public abstract class Node
{ // Update();
public abstract NodeState Evalute();
}
자식 노드들의 실행 흐름을 제어한다
시퀀스(Sequence) - AND구조
셀렉터(Selector) - OR구조
Condition) 하거나 실제 행동(Action)을 수행 [Root]
|
[Selector] - OR구조
/ \
[Attack] [Chase] - Sequence (And 구조)
|
[IsNearTarget] - Condition(Leaf)
|
[MoveToTarget] - Action(Leaf)
AttackAction: 공격이 가능한가? -> 가능하다면 공격 (Success / Failure)| 정의 | 한계점 | |
|---|---|---|
| FSM | 상태를 분기 | 코드가 복잡해짐 |
| State Pattern | 상태 책임 분리 | 전이 폭증 현상 |
| Behaviour Tree | 상태 조건 판별 트리 구조 | 구조 파악 어려움, 협업 활용 못함 |
| BT Graph | 코드 기반 BT 시각화 | 영어를 잘해야함 |