FSM
상태 노드들을 연결하여 인공지능을 설계하는 방식이다
모든 상태 노드들에 상하 관계가 없는 수평 구조이다
즉, 모든 상태 노드에서 모든 상태 노드로 전환이 가능하고 구현이 쉽다
하지만, 상태 노드가 많아질수록 굉장히 복잡해지는 문제가 발생하다
Behavior Tree
우선순위와 트리 구조를 사용해서 인공지능을 설계하는 방식이다
상하 관계가 있는 수직 구조이다
상위 상태 노드(Composite Task)들은 서브 상태 트리(Child Task)의 동작 여부를 결정한다
하위 상태 노드(Child Task)들은 자신이 맡은 작업만 수행하는 구조이다
적절한 규칙을 통해서 노드가 많아져도 가독성이 높다
하지만, 규칙과 다양한 노드들의 용도를 알아야 해서 구현하기가 약간 까다롭다
Blackboard
Behavior Tree의 판단에 필요한 데이터 에셋이다
매 순간 업데이트되며 Behavior Tree의 동작에 영향을 준다
Behavior Tree의 규칙
- 우선 순위와 Task
트리의 위, 좌측일수록 우선순위가 높다
시작 노드를 설정할 필요 없다 항상 왼쪽 노드부터 깊이 우선 탐색을 진행한다
각 노드를 Task라고 부른다
- Task 종류
Behavior Tree는 상위 노드에서 어떤 하위 서브 트리를 실행할지 결정하고
이런 상위 노드를 Composite Task라고 부르고
Composite Task의 하위 노드를 Child Task라고 부른다
- Composite Task 종류
Sequence:
여러 Child Task를 왼쪽부터 순서대로 수행
Selector:
여러 Child Task 중 조건에 맞는 하나의 Child Task를 선택해서 수행
Parellel:
여러 Child Task를 동시에 수행
- Task 수행 결과
InProgress:
Task 수행 중
Succeeded:
Task 수행 성공
Failed:
내부 요인으로 인한 Task 수행 실패
Aborted:
외부 요인으로 인한 Task 수행 실패
- Child Task 수행 결과에 따른 Composite Task 반응
Sequence:
실패한 Child Task가 나올 때까지 수행
Selector:
실패한 Child Task는 넘어가고 다음 Child Task 수행
Paralle:
실패한 Child Task가 나올 때까지 수행
- Composite Task에 부착 가능한 기능
Decorator:
해당 Composite Task가 실행되는 조건을 지정
Service:
해당 Composite Task가 수행중일 때 Tick() 함수가 호출되게끔 함
Observer Abort:
Decorator 조건에 부합되면 현재 수행 중인 Composite Task 내 모든 Child Task를 중지하고 루트 노드부터 다시 수행한다
'게임 엔진 > [코드조선] 언리얼' 카테고리의 다른 글
언리얼 AI - Decorator (0) | 2024.05.16 |
---|---|
언리얼 AI - Blackboard Key (0) | 2024.05.16 |
언리얼 AI - AIController (0) | 2024.05.16 |
언리얼 Damage Framework - TakeDamage 함수 (0) | 2024.05.15 |
언리얼 Collision - Draw Debug (+ Console Command) (0) | 2024.05.15 |