16일차) 쿼터뷰 액션 게임 포폴
* 포폴 진행 상황
- BT 오픈 소스 분석 완료
- 분석한 오픈소스 클래스를 이용해 내 포폴에 적용 하는 중
- 플레이어 주변 타일 중 에너미와 가장 가까운 비어 있는 타일 찾는 알고리즘 제작
* BT 오픈 소스 분석 내용 정리
( 소스 출처 : http://www.cplusplus.com/forum/general/141582/ )
0. 기본 개념

- Decider(결정) + Behavior(행동) 으로 구성된 단위 트리들의 집합
(decider와 behavior 를 앞으로 컴포넌트라 명명)
- decider는 매 틱 당 본인에게 속해 있는 하부 컴포넌트들을 검사하고 결과를 수행한다.
1. base 부모 클래스(Node, CompositeNode)
- BT AI 컴포넌트를 구성하기 위한 부모 클래스
1.1 Node 클래스
- run() 함수 하나 존재
- run() 함수 : 각 컴포넌트를 동작 시키는 함수
1.2 CompositeNode 클래스
- Node 클래스를 상속받은 자식 클래스
- 하위 컴포넌트들을 결합해주는 클래스
- Node 클래스로 선언된 컴포넌트들을 list 컨테이너로 담아(push_back) 결합해준다.
2. 컴포넌트 구성(decider, sequence, behavior)

2.1 decider 클래스(decider)
- CompositeNode 클래스를 상속받은 자식 클래스
- 리스트 컨테이너를 가지고 있어 하부트리를 결합하고 실행시켜준다.
2.2 sequence 클래스(decider)
- CompositeNode 클래스를 상속받은 자식 클래스
- 리스트 컨테이너를 가지고 있어 하부트리를 결합하고 실행시켜준다.
2.3 behavior 클래스
- Node 클래스를 상속받은 자식 클래스
- 오직 실행함수 run() 만 가지고 있어 상위 컴포넌트의 명령에 따라 run()을 실행한다.
2.4 위의 문을 여는 예시 BT tree 해석
1) decider->run() 으로 decider가 가지고 있는 list 내부의 컴포넌트를 순차로 실행, 체크한다.
2) 첫번째 하부 컴포넌트인 check open 을 검사 한다.
(만일 문이 열려 있다면 decider는 이를 감지하고 트리를 종료 한다.)
3) 문이 닫혀 있다면 decider list의 다음 컴포넌트인 sequence를 실행한다.
4) sequence가 가지고 있는 list 내부의 컴포넌트를 순차로 실행, 체크 한다.
5) sequence의 list 의 첫번째 컴포넌트인 approach 를 실행한다.
6) 문과 가까워 지는 behavior(행동) 를 처리한다.
7) behavior 처리 후 문과 충분히 가깝다면 sequence의 list 의 다음 컴포넌트인 open을 실행한다.
(만일 문이 충분히 가깝지 않다면 BT트리를 종료 한다. 다음 틱에 동일 과정 실행)
>> 상기 이해한 오픈소스 클래스를 이용해 내 포폴에 적용 하는 중
댓글
댓글 쓰기