- 개요
몬스터에서 사용할 AIController 클래스를 생성하고
해당 AIController의 Behavior Tree에서 사용할 Service 클래스를 생성한다

우선, 주모듈.build.cs 파일에 AIModule 모듈을 추가하여 AI와 관련한 기능을 프로젝트에 포함시킨다
1) AuraAIController 클래스

AIController 클래스를 상속받은 AuraAIController 클래스를 생성한다
프로젝트에 존재하는 몬스터들은 해당 AIController 클래스를 사용하여 동작한다
멤버변수로는 BehaviorTree를 설정 + 관리할 BehaviorTreeComponent를 갖고 있도록 한다

생성자에서는 BlackboardComponent와 BehaviorTreeComponent를 Subobeject로 생성하고 멤버변수에 설정한다
BlackboardComponent는 의사결정에 필요한 데이터를 모아놓은 Blackboard를 설정 + 관리하는 클래스이다
이때 BlackboardComponent를 의미하는 Blackboard는 부모클래스인 AIController 클래스에 이미 존재하므로
AuraAIController 클래스에는 따로 추가하지 않았다
2) BTService_FindNearestPlayer 클래스

BTService_BlueprintBase 클래스로부터 상속받은 BTService_FindNearestPlayer 클래스를 생성한다

이때 언리얼 엔진에서 BTService_BlueprintBase 클래스를 C++ 클래스로 정의하지 않을 것을 권장하므로
간단한 로직만 C++ 클래스에서 정의하고, 구체적인 동작은 블루프린트에서 정의한다
3) AuraEnemy 클래스

AuraAIController가 몬스터에 빙의한 후에 호출하는 PossessedBy 함수를 추가하여 오버라이드한다

멤버변수에 몬스터에서 사용할 BehaviorTree / AIController를 추가한다

PossessedBy 함수의 오버라이드한 로직은 위와 같다
몬스터와 관련된 로직은 서버에서 처리해야 하므로 부모 함수를 호출한 후에 서버가 아니라면 얼리 리턴한다
몬스터의 Controller를 가져와 AuraAIController로 캐스팅한 후에 멤버변수에 설정한다
이후 AIController의 BehaviorTree -> Blackboard를 순서대로 가져와 BlackboardComponent를 설정한다
이후, AIContorller로부터 RunBehaviorTree 함수를 호출하여 AI를 실행한다
4) 언리얼 에디터

위와 같이 필요한 요소들을 생성한다
4 - 1) BTServer_FindNearestPlayer 블루프린트

로직은 위와 같이 구성하여 대상 몬스터의 이름을 가져와 화면에 출력하도록 설정한다

해당 Service 노드의 설명과 이름을 위와 같이 설정한다
Service 노드는 Composites 노드가 활성화될 때 주기적으로 실행하는 부가 명령을 설정하므로
로직을 실행하는 주기를 위와 같이 설정할 수 있다
4 - 2) BehaviorTree

로직을 위와 같이 구성하여 Sequence 노드 - FindNearestPlayer 노드를 실행하도록 설정하였다

또한 BehaviorTree에서 사용할 Blackboard를 위와 같이 생성한 Blackboard를 사용하도록 설정한다
4 - 3) BP_EnemyBase 클래스


몬스터의 조상 클래스에서 사용할 AIController 클래스와 BehaviorTree를 위와 같이 설정한다
- 최종 실행 결과
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| 몬스터 AI - 4) 추적 AI & 적과 GE를 적용하는 Actor 클래스 개선 (0) | 2025.09.20 |
|---|---|
| 몬스터 AI - 3) Service 클래스를 이용한 몬스터의 추적 구현 (0) | 2025.09.19 |
| 몬스터 AI - 1) AI의 구성과 동작방식 (0) | 2025.09.19 |
| 데미지 처리 심화 - 최종) 속성 공격 / 저항의 추가와 공격 스킬의 세분화 (0) | 2025.09.14 |
| 데미지 처리 심화 - 4) 처리된 데미지에 따라 다른 UI 출력 (0) | 2025.09.13 |