본문 바로가기

강동새싹언리얼수업/언리얼

231227 수업 EQS (Environment Query System)

환경을 탐색하고 결정

Unreal Engine의 AI Perception과 EQS(Query System)는 게임에서 AI가 주변 환경을 인식하고 판단하는 데 사용되는 도구

AI Perception:

AI Perception은 AI가 주변 환경을 인식하고 상호 작용할 수 있도록 해주는 시스템입니다.

AI 캐릭터가 주변에 무엇이 있는지 감지하고 이해하는 데 사용됩니다.

AI Perception은 시각, 청각, 특정 이벤트 또는 사건에 대한 감지 등을 포함하여 다양한 감각을 통해 주변 환경을 감지합니다.

 

EQS (Environment Query System):

EQS는 AI가 환경을 탐색하고 결정을 내릴 때 사용되는 쿼리 시스템입니다.

EQS는 특정 질문 또는 쿼리를 작성하여 AI에게 주변 환경을 조사하고 상황에 맞는 최적의 결정을 내리도록 도와줍니다.

예를 들어, AI가 적을 추적할지, 아이템을 찾을지, 플레이어와의 상호 작용을 할지 등을 결정하는 데 사용됩니다.

 

EOS 폴더를 만들고 AI>EnviromentQuery를 선택하고 EOS_Siege를 만든다

우클릭후 Points:Grid를 선택해 SimpleGrid를 추가한다.

 

블루프린트를 만드는데 부모를 EQSTestingPawn로 상속받아 BP_EQS_TestPawn을 만듭니다. EOS에 EQS_Siege를 설정합니다

레벨에서 선택해서 바꿔도 됨

이건 레벨에서만 보인다. 

EQS_Siege에서 QueryGraph에서 Grid를 선택해서 GridHalfSize를 지정한다. SpaceBetween도 100정도로 한다.

화면에서 그리드의 간격이 바뀐다. 

PathExit나 Distance:to Querier조건을 추가해도 된다 점수가 표시된다.

파란색 구체 : 이 구체는 해당 아이템의 테스트가 실패했음을 나타냅니다. 따라서 아이템은 아무런 가중치가 적용되지 않고 결과에서 제외됩니다. 보통 값이 필터로 걸러졌을 때 발생합니다. Distance 테스트 등으로 모든 아이템이 필터 범위를 초과하거나 필터 범위 미만일 때와 같은 경우입니다. 값이 완전히 제외되기를 원하지 않는다면 점수화 섹션의 범위제한(Clamp) 옵션을 사용하면 됩니다.

녹색에서 빨간색 구체 : 녹색에서 빨간색 사이의 구체는 아이템이 특정 테스트에 의한 최적의 결과로서 얼마나 바람직한지를 나타냅니다.
녹색이 빨간색보다 바람직하며, 표시되는 숫자는 가중치가 적용된 아이템의 점수입니다. 하나의 디버그 스텝(Debug Step)만 프리뷰하는 경우 이 값이 선택된 테스트의 최종값이 됩니다.

Distance를 추가하면 가중치가 표시됩니다.

Distance를 0으로 에러인데 FloatValueMax값을 500으로 해주면 에러가 없어진다.

Grid에서 OnCircle로 변경하면 배치가 Circle로 변경된다. 

Number 포인트를 설정하면 공의 개수를 지정할수 있다.

Circle Center ZOffset은 다음과 같이 2가지가 있는데

Circle Center 옵션:

Circle Center는 EQS에서 사용되는 하나의 옵션으로, 원형 영역을 정의할 때 중심 지점을 지정하는 데 사용됩니다.

EQS 쿼리에서 원형 영역을 사용할 때, 해당 영역의 중심을 설정하여 쿼리할 때 필요한 중심점을 제공합니다.

이 옵션은 원을 기반으로 하는 쿼리에 사용되며, 원의 중심을 정의하여 해당 지점을 중심으로 쿼리를 실행합니다.

 

EnvQueryContext_Querier:

이 컨텍스트는 EQS 쿼리를 실행하는 주체를 나타냅니다.
일반적으로 AI 캐릭터나 다른 유형의 쿼리 실행자를 지칭합니다.

EnvQueryContext_Querier는 보통 쿼리를 실행하는 주체인 AI 캐릭터를 나타내며, 해당 캐릭터를 기준으로 쿼리를 실행합니다.

 

EnvQueryContext_Item:

이 컨텍스트는 EQS 쿼리에서 대상이 되는 아이템을 나타냅니다.
일반적으로 대상이 되는 오브젝트, 위치 또는 엔티티를 지칭합니다.

EnvQueryContext_Item은 쿼리 대상으로 사용되는 아이템을 나타내며, 이를 기반으로 쿼리가 실행됩니다.

다음과 같이 EQSC_Siege를 만들어 플레이어에게 Circle Center Query하고자함.

기본적으로 이 함수는 EQS 시스템이 쿼리를 실행할 때, 해당 쿼리에 따라 단일 액터를 제공하도록 설계되어 있습니다. EQS는 주어진 상황에 따라 액터들을 평가하고 테스트하여 가장 적합한 액터를 결정하는 데 사용됩니다. "Provide Single Actor" 함수는 이러한 액터 선택 프로세스에서 단일 액터를 제공하는 역할을 합니다.

이 함수를 사용하면 EQS 시스템은 사용자가 지정한 기준에 따라 하나의 액터를 선택하고, 해당 액터를 기반으로 쿼리를 실행합니다.
이는 예를 들어, 특정 조건을 만족하는 가장 가까운 적 캐릭터, 특정 유형의 아이템 또는 특정 위치에 있는 액터 등을 선택하는 데 활용될 수 있습니다.

Function Override에서 Provide single Actor를 선택합니다.

AIC_Enemy_Base Set State Attack함수로 이동해서 입력변수 AttackTarget을 변수로 승격시켜줍니다. 

 맨뒤에 Set AttackTarget을 연결해줍니다. 이걸 EQSC_Seige에서 사용할겁니다.

EQSC_Seige로 돌아가서  AIC_EnemyBase로 캐스팅해주고 Attack Target변수를 연결해준다.

원래 쿼리 액터를 Attack Target으로 바꿔준다.

실행해보면 아직 테스트가 안되는데 

EOS_Siege로 가서 OnCircle을 선택하고 EQSC_Siege를 CircleCenter로 선택한다.

실행해 EQSTestingPawn을 눌러보면 버그로 인해 디거깅 데이터가 안보일수 있음, 에디터 리부팅

테스트를 위해 Player Start를 지정해본다.

EQS_Siege에서 AddTest를 해서 PathExit를 추가해준다. Max거리도 입력해줘야한다.

BT_Enemy_Base로 가  테스트용 Sequece를 만들고 Run EQSQuery를 추가해준다.

EQSQuery의 Templeate를 EQS_Siege로 바꾸준다.

Run Mode를 25%로 바꾼다

MoveTo도 추가해준다.

테스트용으로 PlayerStart설정한 노드는 끊고 원래대로 연결해준다.

이제 플레이어 주변으로 공이생기고 AIPlayer를 선택하면 점수가 높은 공 주변으로 걸어와야 한다.

테스트를 위해서는 연결을 바꾸면 된다.

Distance Querier도 추가해본다. Max Distance를 설정해야 한다.

테스트에 적용할 수 있는 추가 옵션과 테스트의 용도를 정의합니다.

이건 설명을 위한 예제이다. 설정은 필요없다.

플레이어 캐릭터가 보이는지에 대한 Trace 테스트의 레퍼런스 포인트(컨텍스트)를 제공 

Bool 옵션을 비활성화하면 플레이어 캐릭터를 볼 수 없는 포인트가 필터로 걸러짐

실행이 잘안되면 BT_Enemy_Base에서 맨왼쪽 블록을 끊고 테스트용 Sequece를 연결해준다

 

'강동새싹언리얼수업 > 언리얼' 카테고리의 다른 글

231226 AI수업  (0) 2023.12.26
Retarget  (0) 2023.12.22
SketchFab OpenBrush  (0) 2023.12.22
231221 수업.  (0) 2023.12.21
VR 다트게임 위젯 만들기  (0) 2023.12.21