2024. 6. 25. 20:19ㆍUnity/Unity 학습정리
FSM으로 이것저것 구현하다보면 상태가 많아지거나, 객체가 복잡해질 때 한계가 느껴진다. FSM은 특성상 한개의 상태만 가질 수 있고, 전이를 시키다보면 내가 원하는 상태로 전이 시킬 때 곧 바로 전이가 되는것이아니라 많은 상태를 거치게 된다거나, 뭔가 수정해야할게 많아 지는 상황이 생길 수 도 있다. 이것은 FSM은 모든 상태들이 상호 관계로 이루어져있다는 점에 있다.
이를 보완하기위해 B.T(Behaviour Tree)가 있는데 해당 Behaviour Tree는 말그대로 행동 트리이다. 모든 행동들이 Tree형식으로 관리된다. Node가 존재하고 부모, 자식 Node들이 존재한다.
목차
- Behaviour Tree
- Node
- 공부하면서 느낀점
Behaviour Tree
- 탐색순서
- Behaviour Tree는 트리 구조이기 때문에 Top-Down방식, 그리고 왼쪽으로 오른쪽 순으로 탐색을 합니다.
- DFS (Depth First Search)순서이다.
- 노드
- Action Node(Leaf Node) : 행동을 정의하는 노드
- Selector Node : 자식 노드들 중에 하나라도 성공하는 노드가 있다면 해당 노드를 실행하고 종료한다.(or 연산)
- Sequence Node : 자식 노드들 중에 실패한 노드가 있을 때 까지 진행한다. (And 연산)
- 노드 상태
- Running : 동작 중
- Failure : 실패
- Success : 성공
Node
1. Action Node
Action Node(leaf Node) 는 행동이 담겨져 있는 노드다. 행동 노드가 부모 노드가 될 수 없다. 해당 노드는 분기를 체크할 수 없는 노드 이기 때문에 항상 leaf Node이다.
2. Selector Node
or연산자와 동일한 기능을 하는 노드이다. 해당 노드로 분기되면 Selector Node들이 가진 자식들을 모두 탐색한다. 탐색 하다가 Success / Running 상태인 노드를 만나면 해당 노드를 실행하고 종료한다.
다양한 행동들 중 한 개의 행동만 실행해야 할 때 유용하다.
3. Sequence Node
And연산자와 동일한 기능을한다. 탐색 하다가 Failure 상태 노드를 만날 때 까지 자식 노드들을 진행한다.
여러 행동을 순서대로 진행해야 할 때 유용하다.
느낀점
적 AI를 구현하려고 여러 블로그를 돌아보면서 느낀점은 NPC나 AI의 행동 패턴을 설계 할 때 정말 좋다고 느꼈다. 특히 보스몬스터와 같이 여러 패턴들을 소유하고 있는 보스들 같은 경우에 거리에 따라 체력에 따라 여러 패턴들이 나누어 지고 정해져있는 여러 패턴들 중에 우선순위를 골라 실행해 플레이어를 괴롭히는 코드를 Behaviour Tree로 구현하면 쉽게 관리할 수 있고 구조적으로 편리하다는 생각이 들었다.
다음 포스팅에서는 실제로 Behaviour Tree를 직접 구현해보는 시간을 가질 것이다.
'Unity > Unity 학습정리' 카테고리의 다른 글
플레이어를 쫓아다니는 몬스터 AI 구현 (0) | 2024.07.04 |
---|---|
FSM StateMachine 상속 (0) | 2024.07.01 |
Unity - FSM(Finite State Machine)(3) (0) | 2024.06.20 |
Unity - FSM(Finite State Machine)(2) (0) | 2024.06.18 |
Unity - FSM(Finite State Machine)(1) (0) | 2024.06.17 |