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

몬스터 AI - 3) Service 클래스를 이용한 몬스터의 추적 구현

monstro 2025. 9. 19. 20:26
728x90
반응형

- 개요

이전에 생성한 BTService_FindNearestPlayer 클래스를 오버라이드하여

주기적으로 몬스터가 플레이어를 찾아서 추적할 수 있도록 설정한다

 

1) BTService_FindNearestPlayer 클래스

 

위와 같이 멤버함수멤버변수를 추가한다

Blackboard에서 저장하는 데이터BlackboardKey로서 저장한다

멤버변수는 각각 다음과 같다

  • TagetToFollowSelector : Object로서, 몬스터가 추적할 플레이어
  • DistanceToTargetSelector : Float로서, 몬스터가 추적할 거리

 

 

TickNode 함수는 주기적으로 수행하는 Service에서 주기적으로 호출하는 함수이다

로직은 다음과 같다

  • 부모 클래스의 멤버변수인 AIOwner를 통해 AIController를 소유한 Pawn을 가져온다
  • Pawn이 갖고 있는 Tag를 비교하여 지역변수 TargetTag를 설정한다
  • 지역 컨테이너 변수 ActorsWithTagWorld를 탐색하여 TargetTag에 해당하는 Actor를 저장한다
  • 이후 ActorsWithTag를 순회하면서 다음의 로직을 진행한다
    • AIController를 소유한 PawnActor 거리 차이를 비교하여 지역변수 ClosestDistance에 저장한다 
    • ClosestDistance 이내에 위치한 Actor지역변수 ClosestActor에 저장한다
  •  순회가 끝난후 다음의 로직을 진행한다
    • TagetToFollowSelectorClosestActorUObject로 저장한다
    • DistanceToTargetSelectorClosestDistancefloat로 저장한다

 

2) 언리얼 에디터

2 - 1) BTS_FindNearestPlayer 블루프린트

 

위와 같이 ReceiveTickAI 노드만 생성하고 나머지 로직은 제거한다

 

2 - 2) BT_EnemyBehaviorTree 블루프린트

 

Selector 노드 - FindNearestPlayer 서비스를 설정하고

BlackboardTargetToFollowDistanceToTarget을 사용하도록 설정한다

이후 수행하는 MoveTo 태스크는 BlackboardTargetToFollow를 사용하도록 설정한다

 

2 - 3) BP_EnemyBase 블루프린트

 

몬스터의 Tags 옵션을 위와 같이 설정한다

 

- 최종 실행 결과

 

728x90
반응형