AIController
캐릭터 클래스 안에는 APawn의 멤버 AIControllerClass와 AutoPossessAI가 있다.
AIControllerClass = AMyAIController::StaticClass();
AutoPossessAI = EAutoPossessAI::PlacedInWorldOrSpawned;
AIController 클래스의 OnPossess 함수
ㄴ Possess 하기 시작하는 순간에 호출되는 함수
AIController 클래스의 OnUnPossess 함수
ㄴ Possess 끝날 때 호출되는 함수
Behavior Tree와 BlackBoard
BlackBoard : AI에서 사용할 데이터를 모아놓는 저장소
Behavior Tree : BlackBoard에 저장된 데이터를 기반으로 AI가 어떻게 동작할지 결정하는 트리
시퀀스 노드는 왼쪽에서 오르쪽으로 자식 노드를 순서대로 실행한다.
Wait과 Move To 사이에 올 노드에서는 PatrolPos 값을 블랙보드에 갱신하는 작업을 해야 한다. 이것은 BTTaskNode 를 상속받는 클래스로 구현한다.
이 노드를 가지는 OwnerComp는 BehaviorTreeComponent가 될 것이고, ExecuteTask 구현부에서 트리와 연관된 블랙보드에 키-값을 세팅한다.
주기적으로 주변을 탐색하여 행동을 결정하는 기능을 구현할 때 (서비스)
ㄴ BTService 클래스를 구현, 실행 주기를 정할 수 있음
데코레이터는 조건에 따라 노드의 성공 실패 여부를 결정한다.
데코레이터를 양쪽 selector에 추가하여 분기문으로 동작하게 한다.
키의 상태만으로 성공 실패를 결정하지 않고 구체적으로 성공 실패를 결정하기 위한 데코레이터는 BTDecorator를 상속받는 클래스를 사용해야 한다.
데코레이터 생성을 위해 BTDecorator 클래스를 상속받는 클래스를 생성한다.