UE에서는 NPC의 Pawn이나 Character를 제어할 수 있도록 AI Controller를 제공한다.
게임플레이 프레임워크에서 유저가 Player Controller를 통해 플레이어 캐릭터에 Possess 빙의 하여 로그인을 하는 것처럼,
동일한 방식으로 AI Controller를 통해 AI의 제어권 안에서 빙의할 수 있다.
Possess되는 폰/캐릭터는
// ai controller
AIControllerClass = ATrooperAIController::StaticClass();
AutoPossessAI = EAutoPossessAI::PlacedInWorldOrSpawned;
를 통해 ai controller에 대해 제어권을 맡기도록 등록해야하고
AI Controller는
virtual void OnPossess(APawn* InPawn) override;
virtual void OnUnPossess() override;
이 두 함수를 통해, 빙의할 때와 빙의를 풀 때의 로직을 지정할 수 있다.
BT는 NPC가 해야할 행동을 분석하고, 우선순위가 높은 행동부터 NPC가 실행할 수 있도록 트리 구조로 설계하는 기법이다.
AI 캐릭터/폰의 행동 로직을 구현하기 위해서 Behavior Tree 를 이용한다.
여기서 행동 로직이란
등 특정 행위 지시를 말한다.
AI 캐릭터가 순찰 - 플레이어 추격 간 액션을 전환하는 예시를 볼 수 있다.
BT는 블루프린트와 유사한 시각적 방식으로 생성되어, 비헤이비어 트리 그래프(Behavior Tree Graph)에 기능이 탑재된 다양한 노드를 추가하고 연결하는 방식이다.
비헤이비어 트리가 로직을 실행하는 한편, 비헤이비어 트리가 결정을 내리는 데 필요한 정보인 블랙보드 키(Blackboard Key) 는 블랙보드(Blackboard) 라는 별도의 에셋에 저장됩니다. 일반적인 워크플로는 블랙보드를 생성하고, 블랙보드 키를 추가한 다음, 블랙보드 에셋을 사용하는 비헤이비어 트리를 생성하는 순서입니다. 블랙보드는 아래 이미지에서처럼 비헤이비어 트리에 할당됩니다.
자식 노드들에 대해 순차 방문
자식 노드 실행 실패 시 실행 중지
순차적으로 실행할 명령에 대한 정의
앞선
BT가 태스크를 실행할 때 Task 클래스의 ExecuteTask라는 멤버 함수를 실행하며, 이 함수는 다음 값 중 하나를 반환해야 한다.
Aborted
Failed
Succeeded
InProgress
언리얼 비디오 리소스
비디오 포맷 적용