FSM을 사용하여 몬스터 AI를 다루다가
앞으로의 확장성, 개발속도면에서 더 좋다고 생각되는 BT(Behavior Tree)를 사용하기로 마음먹었다.
하지만 혼자 프로그래밍을 하다보니 드는 시간도 시간이고 효율을 따져야겠다고 생각했다.
처음부터 개발해서 앞으로 유지보수까지 어떻게 할까 생각하니 좀 막막하기도 하고..
모든걸 직접 만드는게 제일 좋겠지만.. 지금은 에셋을 활용하기로 결정.
유니티엔 비쥬얼 노드로 바로바로 작업이 가능한 Behavior Designer가 존재한다. 후기도 좋고 좋아보여서 채택!
Behavior Designer에 기반하여 행동트리를 잠시 설명하자면..
행동트리
기존 AI에 주로 쓰이던 FSM, HFSM의 문제점을 보완하여
보다 다양한 AI 패턴을 구현하는데 최적화된 방법
행동트리의 주요 노드
Behavior Desinger엔 4가지 Task가 존재한다
Action(Leaf)
-가장 낮은 수준의 노드
-자식 노드를 가질 수 없다.
-실제 게임에 필요한 로직(걷기, 공격 등)을 담당함
Composite
-하나 이상의 자식을 가질 수 있다
-핵심 용도: 노드의 흐름을 제어하는 것
-자주 쓰이는 Composite: Select, Sequence
Select: 자식 노드가 true를 반환할 때까지 자식 노드 실행 (자식 중 한가지 선택)
Sequence: 자식 노드가 false를 반환할 때까지 자식 노드 실행 (자식들 순차적 실행)
Decorator
-오직 하나의 자식을 가짐
-자식 노드의 결과를 변형하거나 반복하는 역할
조건 만족시 자식 실행 (반환 결과는 자식의 반환 결과에 의존)
조건 불만족시 false 반환
-자주 쓰이는 Decoration: Probability, TimeOut, CheckEvent 등
Conditional
-원래 BT엔 Conditional이란 노드는 없다
-Behavior Desinger에서 보니 Has Collision2D 처럼 비교문으로 쓰이는 것 같다
행동트리의 핵심
행동트리는 기본적으로 모든 프레임마다 트리의 루트부터 아래로 이동하며
어떤 노드가 활성 상태인지 체크하고, 현재 활성 노드에 도달하여 다시 체크할 때까지
트리의 모든 노드를 재점검한다
트리를 순회하며 노드를 체크, 노드가 작업의 성공 여부를 반환하고
이에따라 행동이 진행되는데 이것이 바로 행동트리의 핵심이다.
노드가 반환하는 값
Success(성공)
Failure(실패)
Running(노드가 아직 실행중인 상태)
마침말
행동트리에 대해 더 알아가고 친해져야겠다.
이왕 에셋 쓰기로한거 제대로 활용해보겠다.
다음엔 Behavior Designer에 대해 글을 써보고 싶다.
화이팅
#참고 링크
NDC 16 <야생의 땅: 듀랑고>의 거친 환경에서 살아가는 동물 AI
NDC 18 '모바일 MMO RPG 로열 블러드' 사례로 본 "복잡한 이벤트 시스템 구현 Behavior tree 패턴으로 한방에 해결하기."
'프로젝트 > Color Lim 개발일지' 카테고리의 다른 글
2021-05-30 개발일지 (0) | 2021.05.31 |
---|---|
2021-05-28 개발일지 (0) | 2021.05.29 |
2021-05-27~28 개발일지 (0) | 2021.05.28 |
2021-05-18 개발일지 (0) | 2021.05.19 |
2021-04-18 개발일지 (0) | 2021.04.18 |