24. SEQUENCE
• 만약 한 동작이라도 실수한다면 스매싱을 제대로 할 수 없을 것이다.
• Sequence는 이런 용도로 사용한다.
25. SELECTOR
• Selector는 자식 노드 가운데 하나를 실행하기 위한 노드이다.
• 왼쪽에서 오른쪽으로 순서로 깊이 우선 탐색 방식으로 순회한다.
Selector
Action 1 Sequence Action 4
1 4
Action 2 Action 3
2 3
26. SELECTOR
• 자식 노드가 success를 반환할 때까지 순회한다.
Selector
Sqeuence
A pattern
Sqeuence
B pattern
Sqeuence
C pattern
1 2
A 선택 안함
B 선택!
Root
Selector 성공 반환
27. SELECTOR
• 모든 자식 노드가 실패하면 실패를 반환하고 종료한다.
Selector
Sqeuence
A pattern
Sqeuence
B pattern
Sqeuence
C pattern
1 2 3
A 패턴 실패 B 패턴 실패
Root
C 패턴 실패
Selector 실패 반환
30. DECORATOR
• Decorator는 노드를 실행할 조건을 정의한 노드이다.
• Composite 혹은 Task 노드에 붙여 해당 노드를 실행할 것인지 결정한다.
Selector
Peace~! 넌 뒤졌다
받은돈 > 500
31. SERVICE
• Composite 혹은 Task 노드에 붙여 그 노드가 실행되는 동안 정해진 빈도에 따라 실
행된다.
• 보통 검사를 하고 그 검사를 바탕으로 블랙보드의 데이터를 업데이트한다.
적 감지 범위
Target
적 감지 범위
Target
타겟 위치 업데이트
32. SERVICE
초록색이 Selector 노드에 붙힌 Service 노드이다.
Interval : 해당 시간마다 서비스 실행
Random Deviation : Interval 값에 랜덤하게 더함
33. 실제 구현
• 언리얼 엔진4 행동트리 퀵스타트 가이드
https://docs.unrealengine.com/ko/Engine/AI/BehaviorTrees/QuickStart/index.html
34. 행동 트리의 장점
• 최상위 노드를 통해 AI 로직을 쉽게 파악할 수 있다.
AI
Idle Chase Combat
35. 행동 트리의 장점
• 트리를 통해 확장하여 정교한 AI를 구현할 수 있다.
AI
Idle Chase Combat
Smoke Patrol Melee Shoot
Grenade Weapon
36. 행동 트리의 장점
• 필요에 따라 언제든지 Task를 재사용할 수 있다.
• 이때 FSM처럼 상태 전이를 위한 연결을 고려할 필요가 없다.
AI
A B C
1 2 3 4 5 3 5
특정 위치에 삽입되는 순간 주위
노드와의 관계와 역할이 정해짐
37. 행동 트리의 장점
• Task 뿐만 아니라 하나의 분기를 이루는 노드의 집합도 재사용 가능하다.
AI
A B C
1 2 3 4 5
A
1 2 3
B
4 5
39. 주의할 점
• 행동 트리의 탐색 순서가 행동에 영향을 미친다.
Sequence
Idle Move Attack
Sequence
Attack Move Idle
실수로 노드의 위치가 바뀌면 몬스터는 엉뚱
한 행동을 할 수 있다.
40. 주의할 점
• Selector의 자식 노드가 많을수록 AI의 의사결정이 지연될 수 있다.
Selector
1 2 n
시간 복잡도 : O(n)
41. 주의할 점
• 노드 간에 의존성이 없고 필요한 정보는 Blackboard나 게임 오브젝트에서 얻어온다.
Blackboard
Data
Sequence
Idle Move Attack
Objects
42. 결론
• 트리의 확장을 통하여 간단한 AI 뿐만 아니라 정교한 AI도 구현 가능하다.
• 트리 노드가 아무리 많아도 상태 전이에 따른 연결을 고민할 필요가 없다.
• 코드의 가독성이 좋고 시각화 툴을 만들기 용이한 구조이다.
• 모듈화가 가능한 구조로 코드 재사용과 확장성이 좋다.