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가 어떻게 동작할지 결정하는 트리

 

MyAIController 클래스에 두개의 멤버 추가

 

Wait과 MoveTo 사이에 오는 노드 실행에 실패하면 다음 노드 (MoveTo)는 실행되지 않는다.

시퀀스 노드는 왼쪽에서 오르쪽으로 자식 노드를 순서대로 실행한다.

Wait과 Move To 사이에 올 노드에서는 PatrolPos 값을 블랙보드에 갱신하는 작업을 해야 한다. 이것은 BTTaskNode 를 상속받는 클래스로 구현한다.

ExecuteTask 함수를 오버라이드한다.

이 노드를 가지는 OwnerComp는 BehaviorTreeComponent가 될 것이고, ExecuteTask 구현부에서 트리와 연관된 블랙보드에 키-값을 세팅한다.

 

주기적으로 주변을 탐색하여 행동을 결정하는 기능을 구현할 때 (서비스)

ㄴ BTService 클래스를 구현, 실행 주기를 정할 수 있음

 

일정 주기로 주변을 탐색하여 Target 키에 값을 갱신하는 SearchTarget 서비스
데코레이터 정의
블랙보드 키의 상태에 따라 성공 실패 여부가 결정되는 데코레이터 TargetOn, TargetOff

데코레이터는 조건에 따라 노드의 성공 실패 여부를 결정한다.

데코레이터를 양쪽 selector에 추가하여 분기문으로 동작하게 한다.

 

키의 상태만으로 성공 실패를 결정하지 않고 구체적으로 성공 실패를 결정하기 위한 데코레이터는 BTDecorator를 상속받는 클래스를 사용해야 한다.

CanAttack 이름의 노드를 가지는 데코레이터

데코레이터 생성을 위해 BTDecorator 클래스를 상속받는 클래스를 생성한다.

bool 값을 반환하는 함수를 재정의해야 한다. 여기서 반환하는 bool 값이 true면 왼쪽 자식 노드가 성공이다.

 

'언리얼 5 > 정리' 카테고리의 다른 글

라이팅 설정  (0) 2022.10.05
컨테이너  (0) 2022.09.15
충돌과 UI  (0) 2022.09.14
애니메이션  (0) 2022.09.13
Unreal의 기초  (0) 2022.09.12

+ Recent posts