Unreal Engine/GCC Class (5.5.4)

Unreal Engine 5 배워보기 - 40일차

보별 2025. 5. 20. 19:15
반응형

컴퓨터 및 게임 관련 전공인이 아닌 문외한 일반인이 언리얼 엔진을 배우면서 정리한 내용입니다.

그날그날 배웠던 내용을 제가 나중에 보기 위해 정리한 것으로, 지금 당장 보기에 부족한 점이 아주아주 많고 추후에 수정이 될 수도 있습니다.

오탈자 및 잘못 기재된 내용 지적, 부족한 내용 설명은 언제든지 환영입니다.

 

본글은 언리얼 엔진 5.5.4 버전 영문판을 기준으로 합니다.

 

----------------------------------------------------------------------------------------------------------------

 

40일차 학습 내용

- EQS

   Test

- 적이 플레이어의 위치에 따라 벽에 은폐하는 EQS

 

 

EQS

38일 차에서 배웠던 EQS에 대한 기본 개념을 한 번 더 정리하고, 한번 사용해보도록 하겠다.

EQS는 주변 환경에 점수를 매겨주는 시스템으로, 이 점수를 AI에 적용시켜 AI의 이동 경로, 엄폐 위치 등을 결정하는 데에 사용한다.

EQS 남발하면 컴퓨터 자원 소모 높기에 사용에 주의해야한다.

EQS에 들어가는 요소로 "Generator" , "Test" , "EQC" 가 있다.

"Generator" 는 점수를 매기는 영역으로, 해당 영역 위에 "Item" 을 생성하여 해당 "Item" 에 점수를 매겨준다.

위 그림에 있는 청옥색의 구체가 "Item" 인데, "Item" 에는 Object 나 Vector 값이 들어간다.

"Test" 는 "Item" 에 점수를 매기는 기준으로, 거리, 방향 등이 들어갈 수 있다.

"EQC" 는 "Test" 의 점수를 매기는 기준으로, 플레이어, 적, 자기자신 등을 기준으로 해줄 수 있다.

그리고 BT에서 "Run EQS" 로 EQS를 실행해주면 "Generator" 내에 있는 "Item" 에 매겨진 점수 중 가장 높은 "Item" 의 값을 BB 키 값에 반환하여 BT에서 실행하도록 해준다.

Test

우선 "Test" 로 사용되는 항목들을 알아보도록 하겠다.

'Distance' 는 "Item" 과 선택된 EQC까지의 거리를 평가할 때 쓰인다.

위치가 두 개 이상이면 각각의 거리를 확인한 결과의 평균값을 반환하게 된다.

'Dot' 은 두 벡터의 내적 계산하여 방향을 구할 때 사용하고, EQC의 회전값일 수도 있고 두 포인트 간의 벡터값일 수도 있다.

'Dot'  무언가가 다른 것을 향해 있는지 확인할 때 유용하게 사용된다.

'Overlap' 는 영역 내에 아이템이 있는지 확인할 때 사용된다.

'Pathfinding' 은 EQC로 가는 경로나 EQC로부터 오는 경로의 존재 여부, 비용 또는 길이를 확인할 때 사용한다.

'Trace' 는 아이템이나 EQC를 도착점이나 출발점으로 한 뒤, Trace를 쏘아서 히트 여부를 사용해서 점수를 매긴다.

Trace가 막힐 경우 막힌 지점 이후의 Item들은 '1' 의 값으로 설정되고, Trace가 막히지 않으면 '0' 의 값이 출력된다.

"Filter" 옵션의 "Bool Match" 설정 시 결과가 반전되는데, 위처럼 Trace가 막혀 닿지 않는 곳을 1점으로 매기지만, "Bool Match" 설정 시 Trace가 막혀 닿지 않는 곳을 0점으로 매기게 된다.

"Bool Match" 를 활용할 경우, 원래라면 적이 플레이어가 시야에 있을 때는 플레이어를 피하고 플레이어가 시야에 없다면 플레이어에게 이동하는 것을, 플레이어가 시야에 있을 경우 플레이어에게 이동하고 플레이어가 시야에 없을 경우 피하는 반대의 경우를 만들 수도 있다.

이는 적이 레벨에서 플레이어를 볼 수 있는지 여부를 확인할 때 사용된다.

다음으로 "Test" 에서 설정할 수 있는 것들 중 일부를 알아보도록 하겠다.

"Test Purpose" 에서는 "Filter Only" , "Score Only" , "Filter And Score" 중 하나를 선택할 수 있다.

"Filter Only" 는 "Test" 를 통과하지 못한 "Item" 은 제거해주는 것으로, 뒤에서 따로 설명하겠지만 AI가 엄폐할 장소를 확인하는 데에 사용된다.

"Score Only" 는 "Test" 결과에 따라 "Item" 에 점수를 부여해주는 것으로, AI가 엄폐 장소 중 가장 가까운 장소 확인하는 데에 사용될 수 있다.

"Filter And Score" 같은 경우는 위 두 기능을 모두 사용하는 것이다.

"Test" 를 "Distance" 로 설정했을 경우, 기준으로부터의 거리를 계산하기에 그에 대한 기준을 따로 설정해줘야한다.

"Range" 의 "include Context Location" 에서 거리 계산에 대한 기준을 설정해줄 수 있는데, 여기서 "EnvQueryContext_Querier" 는 자기자신, 즉 이 Query를 실행하는 주체를 의미한다.

"EnvQueryContext_Querier" 로 설정할 경우 자기자신으로부터의 거리에 대해 점수를 계산하는 것이기에, 자기자신이 있는 위치의 아이템에 1점을 부여하고 자기자신으로부터 멀어질수록 점수가 감소하는 형태이다.

다른 것의 경우, 기준으로 삼은 오브젝트가 있는 곳의 아이템에 1점을 부여하고 기준으로 삼은 오브젝트로부터 멀어질 경우 점수가 감소하는 형태이다.

"Scoring Factor" 는 "Test" 결과에 따른 점수에 가중치를 주는 것으로, 수치를 높이면 평가하는 점수의 우선순위가 올라간다.

"Scoring Factor" 가 양수일 경우, 플레이어로부터 멀어지고 기준으로부터 가까워지는 것에 높은 점수를 부여하고, 음수일 경우 플레이어와 가깝고 기준으로부터 멀어지는 것에 높은 점수를 부여해준다.

위에서도 한 번 언급했지만, "EnvQueryContext_Querier" 로 설정할 경우 자기자신으로부터의 거리에 대해 점수를 계산하는 것이기에, 자기자신이 있는 위치의 아이템에 1점을 부여하고 자기자신으로부터 멀어질수록 점수가 감소하는 형태이다.

게임 실행 중에 ' 키를 누르면 디버깅 창이 뜨는데, 여기서 여러 정보를 확인할 수 있다.

 

적이 플레이어의 위치에 따라 벽에 은폐하는 EQS

위에서 배운 여러 "Test" 를 활용하여 아래와 같이 EQS를 작성해주었다.

플레이어로부터 Visibility Channel의 Trace를 쏴서 점수를 매기고, "Filter Only" 를 설정하여 점수가 0점인 "Item" 을 모두 제거해주었다.

아이템을 제거해줘서 적이 점수가 0점인 Item으로 이동할 여부를 완전히 제거해준 것이다.

그리고 Trace의 결괏값이 '1' 인 "Item" 중에서 Overlap Test를 통해 지정한 벽 근처인 "Item" 에 가중치를 줬다.

Distance Test의 EQC를 'Querier' 와 'Player' 로 설정해주고, 각각의 "Scoring Factor" 를 '1' 로 설정해서, 'Querier' 로부터는 가깝고 'Player' 로부터는 먼 곳의 점수의 합을 매겼다.

모든 과정을 합쳐보면 플레이어의 시야가 닿지 않는 곳 중 엄폐하는 벽 근처이면서, 자기자신과 플레이어의 사이 거리가 적정한 곳을 엄폐 위치로 계산해주는 EQS이다.

 

직접 해보았으나 제대로 동작하지 않았기에 예시 사진 및 게임 결과 사진을 첨부하지 못했다.

내일은 특강이 예정되어있는데, 특강이 가볍게 들을 수 있을 정도의 강의인 경우 오늘 배웠던 내용을 한 번 다시 해서 실행을 시켜보도록 하겠다.

 

*아래는 EQS 관련해서 공부할 때 참고하면 좋은 API를 모아놓은 것

EQS System 개요

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/environment-query-system-overview-in-unreal-engine

EQS 가이드

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/environment-query-system-user-guide-in-unreal-engine

EQS 노드

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/environment-query-system-node-reference-in-unreal-engine

EQS Generator

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/eqs-node-reference-generators-in-unreal-engine

EQS

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/eqs-node-reference-contexts-in-unreal-engine

EQS Test

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/eqs-node-reference-tests-in-unreal-engine