본문 바로가기
유니티/3D RPG

18 비헤이비어 트리

by 노오오오오옹 2020. 1. 20.

 기능

※ 참고 사항

1. Action Task : 실제 행동을 표현하는 단말 노드로 항상 true나 false 를 반환해야한다. OnStart(), OnUpdate(), OnEnd()3가지 메소드를 가지는데, OnUpdate() 에서 true 나 false 를 반환하면 그 Action 의 작업이 끝난다. 메서드의 이름은 구현마다 달라진다.

스택에 처음 올라갈 때 OnStart() 가 불려진다. 다만 bool 값을 반환하지 않으면 계속해서 OnUpdate() 가 불린다. 그러다가 bool 값이 반환되면 스택에서 빠지면서 OnEnd() 가 불린다. 

 

2. Composite Task : 여러 개의 자식으로 구성된 태스크로 Select, Sequence 등이 있다. Composite의 핵심 용도는 Node 의 흐름을 제어하는 것이다. 기본적으로 Node 의 실행 순서는 위에서 아래로, 왼쪽에서 오른쪽이다. 

Selector : 자식 Node가 true 를 반환할 때까지 자식 노드들을 실행한다. 즉 여러가지 중 1개를 선택하는 것이다.

Sequnce : 자식 Node가 false 를 반환할 때까지 자식 노드들을 실행한다. 즉 순차 실행을 의미한다.

 

3. Conditional Aborts :

4. Decoration Task : Decoration 은 1개의 자식만을 가질 수 있다. 해당 조건을 만족하면 자식을 실행하고, 만족하지 못하면 false 를 반환한다. Decoration 이 지정하는 조건을 만족했을 경우의 반환 결과는 자식의 반환 결과에 의존한다.  Probability, TimeOut, CheckEvent 등이 있습니다. 

ex) 50% 확률로 "A" Action을 선택하고 나머지를 "B"를 선택한다고 가정하면

Condtion(50%) - Action "A" / Action "B"

5. 간단한 비헤이비어 트리 

! 주의 사항

 코드

더보기
각 몬스터는 BehaviorTreeController를 보유한다.

모든 행동들은 bool값을 반환한다.
모든 행동들은 bool값을 반환한다.
반환된 bool값을 통해 해당 Action의 반환값을 결정한다.

 

 구현 영상

시야각안에 타겟이 진입하면 따라간다.
정해진 위치안에 순찰을하며, 시야각안에 타겟이 들어오면 다가간다. 공격 사거리안에 들어간다면 타겟을 공격한다.

 

 리펙토링

 

 

'유니티 > 3D RPG' 카테고리의 다른 글

20 게임 최적화  (0) 2020.06.07
19 아이템 드래그/드랍  (0) 2020.06.06
17 퀘스트 시스템  (0) 2020.01.16
15 UI 추가/수정  (0) 2020.01.11
14 아이템 장착 및 해제  (0) 2020.01.07

댓글