Unreal Engine/GCC Class (5.5.4)

Unreal Engine 5 배워보기 - 38일차

보별 2025. 5. 16. 22:16

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

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

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

 

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

 

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

 

38일차 학습 내용

- EQS

   EQC

 

 

EQS

"EQS" 는 AI가 주위 환경을 특정 평가에 따라 내린 점수를 통해서, 점수에 따라 특정 행동을 시키기 위해 사용한다.

우리는 BT에서 "Move To" 를 사용하여 적을 이동시켰는데, 이렇게 할 경우 적이 이동할 때 이동 대상에 대한 정보가 실시간으로 업데이트가 되지 않기에 약간 부자연스럽게 이동하는 모습을 볼 수 있다.

이 경우 "EQS" 를 사용하면 플레이어의 위치를 점수로 계산해서, 이 점수를 반영해 좀 더 자연스럽게 이동하도록 만들어줄 수 있다.

"EQS" 에 대한 API는 아래 링크가 있으니 참고하면 좋다. 

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

우선 "EQS" 를 사용하려면 플러그인이 적용됐는지 확인해봐야한다.

위 그림과 같이 "Plugins" 에 들어가서 "Environment Query Editor" 를 검색하면 "EQS" 가 나오는데, 일반적으로 언리얼을 실행시키기만 플러그인이 자동으로 적용돼있는 것을 알 수 있다.

플러그인이 적용돼있는 것을 확인했다면, Contents Drawer에서 우클릭을 한 뒤 "Artificial Inteligence" 의 "Environment Query" 에서 "EQS" 를 생성할 수 있다.

위 그림과 같이 AI 폴더에 "EQS" 를 하나 생성해준다.

"EQS" 를 실행하면 위 그림과 같이 BB와 비슷한 형식의 창이 뜨는 것을 확인할 수 있다.

빈 공간을 우클릭하면 "Generator" 라는 것을 생성할 수 있는데, "Generator" 는 점수 매길 대상을 가리킨다.

좌측 그림과 같이 "Points Cone" 을 생성하면 부채꼴 모양의 공간을 생성하는데, 해당 공간을 평가하는 것이다.

우측 그림을 보면 부채꼴 모양의 공간에 점이 생성되는 것을 확인할 수 있는데, 부채꼴 모양의 공간에 있는 점이 점수를 받는 대상이 된다.

위 그림을 보면 우측에 "Points Distance" , "Cone Degrees" , "Angle Step" , "Range" 등을 통해서 위 사진에서 보이는 부채꼴 모양 영역의 각도나 크기, 부채꼴 영역 내에 있는 점의 갯수 등을 수정할 수 있다.

위 그림과 같이 "Generator" 를 우클릭하면 "Test" 를 추가할 수 있는데, "Test" 는 점수를 매기는 기준이다.

위 "Generator" 에 이미 'Distance' 가 들어가있는 것을 볼 수 있는데, 여기서 'Distance' 즉, 거리가 점수를 매기는 기준이 되어 거리에 따라 점수를 받게 된다.

EQC

"EQS" 에 들어가는 요소 중 하나로 "EQC" 가 있는데, "EQC" 는 "Test" 의 점수를 매기는 기준이다.

우선 "EQC" 를 생성해서 한 번 확인을 해보도록 하겠다.

우클릭을 하여 "Blueprint Class" 생성 버튼을 누르고, 위 그림과 같이 "EnvQuery" 를 검색하여 "EQC_BluprintBase" 를 생성해줄 수 있다.

우선은 "EQC" 의 기준으로 플레이어를 주고 싶기에 "EQC_Player" 라고 명명해주었다.

"EQC_Player" 를 들어가서 좌측의 'Override' 를 누르면 위 그림과 같이 4개의 선택지가 뜨는데, 플레이어 같은 경우는 게임 진행에 있어 하나의 액터만 존재하기에, "Provide Single Actor" 를 선택해준다.

그리고 위 그림과 같이 BP를 연결해준다.

플레이어에 대한 데이터 필요하기에 플레이어를 인식시킬 수 있도록 해주는 BP이다.

다시 "EQS" 로 돌아가서 생성한 "Generator" 에서 "Test" 의 'Distance To' 를 위에서 생성한 "EQC_Player" 로 설정해준다.

"EQC_Querier" 는 자기 자신 기준으로 설정해주는 것이다.

"Test" 를 'Distance To' 로 설정해줄 경우, 일반적으로 우측 "details" 에서 아래와 같이 설정해준다.

"Test Purpose" - "Filter and Score" ; 거리기반으로 필터링도 하고 점수 부여

"Testmode" - "Distance 3D" ; 3차원 거리 계산

"Distance To" : 기준이 되는 대상

"Filter Type Range" : 거리가 지정 해준 최소 ~ 최대에 있어야 통과; 거리 필터 허용 범위

"Scoring Factor" : 1.0 점수에 곱해지는 가중치; -1 일 경우 가까운게 더 좋은 점수

이렇게 하면 부채꼴 모양 영역에 있는 점들에 플레이어와의 거리를 기준으로 하여 점수를 매겨주게 된다.

위 그림과 같이 'Scoring Factor' 를 음수로 설정해주면 "EQS" 대상과의 거리가 가까울수록 높은 점수를 받게 된다.

게임을 실행해보면 위 그림과 같이 플레이어와 가까울수록 높은 점수가 부여되는 것을 확인할 수 있다.

확인이 됐으면 이번엔 BB로 가서 위 그림과 같이 Vector 형식의 키를 하나 생성해준다.

"EQS" 를 BT에 삽입할 때 사용하기 위해서이다.

BT로 돌아가서 우클릭을 한 뒤 "EQS" 를 검색하여 "Run EQS Query" 노드를 생성해주고, "Run EQS Query" 의 'Query Template' 를 위에서 생성한 "EQS" 로 지정해준 뒤, 'Blackboard Key' 를 위에서 생성한 새로운 Vector 형식의 키인 "TargetActor" 로 설정해준다.

그리고 "Run EQS Query" 노드 옆에 플레이어에게로 이동하는 Move To 노드를 연결해준다.

플레이어에게 다가가는 것 같지만 실제로 확인해보면 플레이어 주위로 이동

게임을 실행해보면 적이 플레이어의 주위를 둥글게 피하며 이동하는 것을 확인할 수 있다.

이번엔 "EQS" 의 기준을 적으로 해보도록 하겠다.

플레이어와 똑같은 방식으로 "EQC" 를 생성해주고, "EQC_Enemy" 라는 이름으로 생성해준다.

적같은 경우는 플레이어와 다르게 하나의 액터만 존재하는 것이 아니고 여러 액터가 존재하기에, 위 그림과 같이 "Provide Actors Set" 을 선택해준다.

적은 여러 종류가 있기에 위 그림과 같이 배열로 하여 BP를 작성해주고, "Get All Actors of Class" 에서 'Actor Class' 를 'BP_NormalZombie' 로 설정해준다.

이렇게 할 경우, "EQS" 의 기준이 'BP_NormalZombie'  에 있는 적들로 설정되게 된다.

위 그림과 같이 하나의 "Generator" 에 "Test" 를 2개 이상 설정해줄 수 있는데, 이 경우 위에 있는 "Test" 일수록 우선 실행 순위 높게 책정된다.