언리얼 엔진 5/개발 일지

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

ciel45 2024. 1. 1. 20:44

지난 포스팅에서 플레이어에게 노출되는 위치를 걸러내는 것까지 했었다.

 

이번엔 엄폐물 주변에 있는 아이템만을 사용하도록 한번 더 걸러낼 것이다.

EQS 에셋에 들어가 SimpleGrid를 우클릭한 뒤, Add Test -> Overlap을 선택해준다.

 

Overlap은 아이템이 자기 주변에 엄폐물이 있는지를 오버랩을 통해 알 수 있도록 하기 위해서 사용하는 것이다.

 

Trace와 마찬가지로, 엄폐물에 가깝지 않은 아이템은 점수를 매길 것 없이 바로 버릴 것이므로 Test Purpose를 Filter Only로 설정한다.

 

디테일 패널의 Overlap Data 섹션에서, X와 Y를 10에서 100으로 바꾼다.

 

왜냐하면, 우선 현재 아이템 간의 간격은 100으로 되어있다. 이는 SimpleGrid 노드 자체를 클릭하면 나오는 디테일 패널에서 Space Between 값을 통해 확인할 수 있다.

 

따라서 오버랩 박스의 X, Y 크기를 100으로 하는 것이 각 아이템이 딱 자기 영역에 한하여 주변에 엄폐물을 접하고 있는지를 판별할 수 있도록 하는 적절한 설정이다.

 

그리고 디테일 패널의 Skip Overlap Querier는 꼭 설정해주어야 한다.

당연히 자기 자신은 오버랩 대상에서 제외해야하기 때문이다.

 

이렇게 오버랩 세팅이 완료되었다.

 

 

 

 

테스트 전에, 아이템들의 위치를 좀 높여줄 필요가 있다.

현재 아이템들이 땅바닥에 박혀있다시피한데, 이러면 아주 낮은 엄폐물에도 트레이싱이 가로막혀 실제로는 숨는 의미가 없을 정도로 낮은 엄폐물을 적합한 것으로 판별할 수 있기 때문이다.

 

따라서 SimpleGrid 노드의 디테일 패널에서 Post Projection Vertical Offset을 0이 아닌 적절히 높은 값으로 설정해주어야 한다.

여기서는 100으로 설정하였다.

 

 

이제 이걸 월드에 놓아보면 다음과 같은 결과가 나온다.

엄폐물 근처의 아이템만 활성화되어있다.

 

 

이제 스코어링을 추가할 것이다. 

살아있는 아이템 중에서 최적의 아이템을 뽑아낼 것인데, 조건은 다음과 같다.

  • 자기 자신에게서 최대한 가깝게
  • 플레이어에게서는 최대한 멀게

 

빠르게 이동하여 엄폐할 수 있으면서도, 플레이어에게는 노출이 어려운 엄폐물이 최적의 포인트가 될 것이다.

 

 

다시 EQS로 돌아가 SimpleGrid에 우클릭, Add Test -> Distance를 선택해준다.

이번엔 두개 추가해주고, Context를 각각 EnvQueryContext_Querier, Context_Player로 설정해준다.

 

 

Distance: to Querier는 자기자신에게서 최대한 가까운 포인트를 선택하기 위함이다. Test Purpose를 ScoreOnly로, Scoring Equation을 Inverse Linear로 설정해준다. 즉 Distance가 0에 가까울 수록, 점수는 더 높아진다.

 

 

Distance: to Context_Player는 플레이어로부터 최대한 먼 포인트를 선택하기 위함이다. 마찬가지로 Score Only로 설정해주고, Scoring Equation은 Linear와 Square 둘 다 상관 없지만, 플레이어로부터 멀 수록 확실하게 더 좋게 평가하기 위해 Square를 선택하였다.

 

 

이렇게 엄폐를 담당하는 EQS 에셋이 완성되었다.

다음 포스팅에서는 이것을 비헤이비어 트리에서 사용하는 방법에 대해 다룰 것이다.