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

몬스터 AI - 최종) EQS를 사용한 원거리 몬스터 AI 설정

monstro 2025. 9. 21. 00:27
728x90
반응형

- 개요

몬스터가 플레이어와의 거리차이를 이용하여 추적하는 방법장애물을 마주했을 경우 동작하기 어렵다

따라서 AIModule에서 지원하는 Environment Query System 줄여서 EQS를 사용하는 것이 효율적이다

EQS는 AI가 환경으로부터 데이터를 수집하는 데 사용함으로써 쿼리를 통해 동작한다

 

- EQS의 동작방식과 구성

Generator의 종류

 

AIController가 빙의된 Pawn을 기준으로 Generator를 사용하여 평면을 생성하여 동작한다

생성한 평면을 구성하는 점들을 Items라고 표현한다

Items를 구성한 각각의 점들로부터 Test라고 불리는 사용자 설계 쿼리를 수행한다

쿼리 수행결과의 가중치가 가장 높은 점이 AI가 동작할 최상의 위치를 의미한다

 

Test의 설정요소

 

Test의 설정요소는 위와 같은데, 표시한 3개의 요소를 알아본다

  • Test Purpose : Test에서 수행하는 작업
    • 필터링 / 우선순위 메기기 / 필터링 + 우선순위 메기기
  • Context : Test의 타겟을 지정
    • EnvQueryContextBlueprintBase 블루프린트를 생성하고 선택한 함수오버라이드하여 지정
  • Bool Match : False로 설정하여 Context를 볼 수 없는 Items의 점을 필터링

 

1) EQS_PlayerContext 블루프린트

 

4개의 함수 중에서 ProvideActorsSet 함수를 오버라이드하여 로직을 구성한다

BP_AuraCharacter 클래스의 Actor들을 찾아서 반환한다

 

2) EQ_FindRangedAttackPosition 블루프린트

 

위와 같이 EnvQuery를 설정하였다

로직은 다음과 같다

  • Grid 제너레이터 : 원거리 몬스터를 기준으로 800의 범위만큼의 격자를 생성
  • Trace (Filter Only) 테스트 : 플레이어를 대상으로 Trace를 수행
  • Distance (Score Only)테스트 : 원거리 몬스터로부터 플레이어와의 거리를 비교하여 우선순위 설정

 

3) BT_EnemyBehaviorTree 블루프린트

 

원거리 몬스터가 수행하는 Sequence 노드에 위의 Task 노드들을 추가한다

  • RunEQSQuery 태스크 : EQ_FindRangeAttackPosition 쿼리를 수행하여 결과를 MoveToLocation에 저장
  • MoveTo 태스크 : 저장한 MoveToLocation을 향해 이동
  • BTT_Attack 태스크 : TargetToFollow를 대상으로 공격
  • Wait 태스크 : 공격한 후에 랜덤한 시간만큼 대기

 

- 최종 실행 결과

 

728x90
반응형