BT 시연 영상
FSM이란?
상태패턴?
Behavior Tree란?
구현 난이도 : FSM < 상태패턴 < BT
구조 복잡할수록 효율 : FSM < 상태패턴 < BT
유니티공식문서 - Behavior Graph
사용법 요약 : 그래프 생성하고, 게임오브젝트에 Behavior Agent 컴포넌트 추가후 그래프 끌어놓고 파라미터값 설정, 이후 생성된 cs파일을 수정하여 상태를 변경시키며 사용하면 된다

실습 영상 보면서 천천히 파악해보기
원하는 도형 선택해서 도식화와 blackBoard 파라미터 설정
패키지매니저 - Behavior Install, Hierachy 마우스우클릭 - Create - Behavior - Behavior Graph
만들어진 Behavior Graph를 이용해서 도식도를 만든다
Selector -> Try In Order
Sequence -> Sequence
Action -> Create New - Action (이름지정 - 이후 코드로 작성 예시) Self Detect Player with detectRange -> 파라미터로 쓸 단어는 파라미터 설정 (그림참조)
Action을 만들어주면 cs파일이 자동으로 생성된다
Action과 연결하는 파라미터는 blackBoard에 파라미터 설정해서 Action과 연결해준다
하려는 Object에 Behavior Agent 컴포넌트 추가 후 Behavior Graph와 연결, 파라미터 설정
1번에서 Action으로 만들어준 cs파일을 수정, 실습할때는 OnUpdate를 수정했었음
로직 코드를 넣고 상태에 따라 다르게 State를 변경한다
*주의할점: 외부에서 받아온 필드들 (SerializeReference가 있는것들)은 .Value를 붙여서 사용해야한다
병렬에서는 Run in Parallel 이라는 것을 만들어서 자리에 넣으면 됨
코드가 너무 길어서 시연영상 있는 곳에 코드 첨부해둠 (벨로그는 접기기능이 없다)
각 노드별 설명은 아래 개념 설명 참조
중요한 것은 위의 그래프 도식도 그림처럼 흐름대로 어떨때 어떤 행동을 한다 라는 것과
Sequence Node 에는 조건을 판단하는 Condition, 행동을 하는 Action 노드가 있다는점이 중요
Condition Node : 어떤 것을 할지 판단하는 노드. 판단하는 코드
Action Node : 거의 무조건 Run을 반환하는 노드, 실행에 대한 코드
예시) 아래경우 병렬처리 하면 된다
거리내에 플레이어 있으면 따라감 -> Condition: 거리내에 확인, Action : 따라간다
거리내에 적이 있으면 총알쏜다 -> Condition: 거리내에 확인, Action 총쏜다'
Tick (틱) : 루트노드가 매 프레임(또는 지정주기)마다 현재 행동을 판단하기위해 호출, 트리전체를 한번 평가한다. 유니티 Update문 처럼
Node (노드) : 노드구조로 동작 (트리니까)
Composite Node (복합 노드)
자식 노드들의 실행 흐름을 제어
- Sequence (시퀀스) : And개념, 하나라도 Success가 아니라면 즉시 반환, Failure라면 즉시 중단, Running이라면 Running반환 후 다음틱에서 다시 호출, 모두 Success 라면 Success반환
- Selector (셀렉터) : OR개념 , 하나라도 Success나 Running이라면 상태 반환, 모두 Failure여야 Failure 반환
- Parallel (병렬) : 무조건 다 실행, 자식 노드를 모두 실행한 뒤 결과반환 (조건은 설정에 따라 달라짐)
Decorator Node (데코레이터 노드)
하나의 자식 노드를 가지며, 자식의 실행 조건이나 결과 변경
- Inverter (인버터) : Success와 Failure 반전, Running은 유지
- Succeeder : 항상 Success 반환
- Repeater : 자식 노드를 원하는 횟수만큼 반복 실행
- Until Fail : 자식이 Failure를 반환할때까지 반복 실행
- Until Success : 자식이 Success를 반환할때까지 반복 실행
- Condition Decorator : 특정 조건이 True일때만 자식 노드를 실행
Leaf Node (리프노드)
트리의 가장 하위 노드로 자식을 가지지 않는다
실제 행동을 수행하거나 조건 판단
- Action : 구체적인 행동을 수행, Success/Failure/Running 반환
- Condition : 특정 상태나 환경 판단, 보통 Success / Failure 반환