언리얼 엔진 - 게임 프로젝트/GAS 프레임워크 RPG 프로젝트

몬스터 AI - 2) AIController 클래스와 Service 클래스

monstro 2025. 9. 19. 16:55
728x90
반응형

- 개요

몬스터에서 사용할 AIController 클래스를 생성하고

해당 AIController의 Behavior Tree에서 사용할 Service 클래스를 생성한다

 

 

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

 

1) AuraAIController 클래스

 

AIController 클래스를 상속받은 AuraAIController 클래스를 생성한다

프로젝트에 존재하는 몬스터들은 해당 AIController 클래스를 사용하여 동작한다

멤버변수로는 BehaviorTree설정 + 관리BehaviorTreeComponent를 갖고 있도록 한다

 

 

생성자에서는 BlackboardComponentBehaviorTreeComponentSubobeject로 생성하고 멤버변수에 설정한다

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로 캐스팅한 후에 멤버변수에 설정한다

이후 AIControllerBehaviorTree -> Blackboard를 순서대로 가져와 BlackboardComponent를 설정한다

이후, AIContorller로부터 RunBehaviorTree 함수를 호출하여 AI를 실행한다

 

4) 언리얼 에디터

AIController 블루프린트 / Blackboard / BehaviorTree / BTService_FindNearestPlayer 블루프린트

 

위와 같이 필요한 요소들을 생성한다

 

4 - 1) BTServer_FindNearestPlayer 블루프린트

 

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

 

 

해당 Service 노드의 설명과 이름을 위와 같이 설정한다

Service 노드Composites 노드가 활성화될 때 주기적으로 실행하는 부가 명령을 설정하므로

로직을 실행하는 주기를 위와 같이 설정할 수 있다

 

4 - 2) BehaviorTree

 

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

 

 

또한 BehaviorTree에서 사용할 Blackboard를 위와 같이 생성한 Blackboard를 사용하도록 설정한다

 

4 - 3) BP_EnemyBase 클래스

 

 

몬스터의 조상 클래스에서 사용할 AIController 클래스BehaviorTree를 위와 같이 설정한다

 

- 최종 실행 결과

 

728x90
반응형