언리얼 엔진 5/개발 일지

[UE5] 블루아카이브 TPS게임 개발일지 (24) - EQS를 이용한 엄폐 AI 1

ciel45 2024. 1. 1. 19:56

적 AI의 엄폐 시스템을 만들기 위해서는 EQS를 사용할 것이다.

 

EQS는 Environment Query System의 약자이다.

직역하면 환경에 질의를 한다는 뜻이 된다. 즉 AI가 주변 환경에 맞춰 최선의 선택을 할 수 있게 해주는 시스템이다.

 

공식 문서의 설명은 여기를 참고하면 될 것같다.

https://docs.unrealengine.com/5.3/ko/environment-query-system-in-unreal-engine/

 

인바이런먼트 쿼리 시스템

인바이런먼트 쿼리 시스템(EQS)이 무엇인지, 이 시스템으로 어떻게 환경 데이터를 쿼리하는지 설명합니다. 그런 다음 이 데이터를 AI가 취할 행동을 결정하는 프로세스에 사용하도록 제공할 수

docs.unrealengine.com

 

이 시스템을 활용하여 적이 최선의 엄폐 위치, 공격 위치를 찾을 수 있도록 할 것이다.

만들어진 EQS는 비헤이비어 트리 내부에 들어갈 것이다. 즉 본 프로젝트에서는 BT_Enemy에 들어갈 것이다.

 

 

우선 EQS 에셋을 만드는 것 부터 시작할 것이다. 컨텐츠 브라우저에 우클릭 -> Artificial Intelligence -> EQS를 선택하여 에셋을 생성할 수 있다.

 

새 EQS를 열면 나오는 화면이다. 언뜻 봐서는 비헤이비어 트리의 시작 화면과 비슷해보이지만, 실제 동작 방식은 매우 다르다.

 

루트로부터 화살표를 드래그하여 Points : Grid를 선택하여준다.

 

이것이 의미하는 바는 EQS 에셋을 월드에 드래그 앤 드롭 해서 놓아보면 알 수 있다.

 

 

동그란 알맹이들이 그리드 모양으로 바닥에 깔려있는 것을 볼 수 있다.

 

이 각 알맹이들은 아이템이라고 부르며, EQS는 이 아이템들 중 최고의 아이템을 찾는 시스템이라고 할 수 있다.

 

이는 필터링으로 아이템을 걸러내거나, 스코어링으로 아이템들에 점수를 주는 방식으로 구현된다.

곧 그러한 방식을 실제로 사용할 것이다.

 

다시 EQS 내부로 돌아와서, SimpleGrid에 조건을 달아줄 것이다.

 

SimpleGrid 노드에 우클릭 -> Add Test -> Trace를 선택해준다.

현재 Trace를 사용하는 목적은,

아이템으로부터 플레이어 쪽으로 라인트레이싱을 해봐서 중간에 다른게 맞지 않는다면,

플레이어로부터 그대로 노출되는 위치라면, 엄폐를 할 만한 위치가 아니므로 그 아이템은 버리기 위한 것이다.

 

우선 플레이어에게 위치가 노출되는 아이템은 점수를 주고 할 것 없이 그대로 버리면 되므로, 디테일 패널의 Test Purpose를 Filter Only로 바꿔준다.

 

그리고 현재 Context가 EnvQueryContext_Querier로 되어있는데, 이는 EQS를 사용하는 적 자기자신을 뜻한다.

Context쪽으로 라인트레이싱을 해야하므로, Context에는 플레이어가 들어가야 한다.

 

플레이어를 의미하는 Context를 새로 만들어주어야 한다.

블루프린트를 생성하되, 부모 클래스를 Env Query Context Blueprint Base로 설정해준다.

 

블루프린트의 이름은 Context_Player로 짓고나면, 

좌측 Functions 섹션을 보면 오버라이딩 할 수 있는 함수가 3개가 있다.

Provide Single Actor를 오버라이딩하여, 플레이어를 리턴하도록 하면 된다.

이렇게 플레이어를 의미하는 간단한 Context가 완성되었다.

 

이제 아까 EQS 에셋의 Trace의 디테일 패널의 Context에 Context_Player를 넣어주면 된다.

 

 

이제 게임에서 이게 어떻게 동작하는지 실험해볼 수 있다.

 

 

EQS 에셋을 월드에 드래그 앤 드롭하여 배치하고, 주변의 지형지물과 PlayerStart 모두에 적절히 걸치도록 한 뒤, 게임을 실행한다.

 

그리고 어퍼스트로피 키를 눌러 AI 디버깅 모드(이름이 이게 맞는지는 잘 모른다)를 켜고, ; 키를 눌러 자유 카메라로 전환한다.

 

 

그러면 아이템들이 각각 플레이어 쪽으로 라인트레이싱을 하여, 가로막힌 것들만 살아남고, 가로막히지 않은 것들은 파란색으로 죽어있는 것을 확인할 수 있다.

 

 

이제 살아남은 아이템들을 또 필터링하고, 스코어링을 통해 저것들 중 최고의 아이템을 엄폐 포인트로 사용하도록 할 것이다.