인바이런먼트 쿼리 시스템 사용자 가이드

EQS 에셋을 생성 및 사용하는 일반적인 방법을 설명합니다.

Choose your operating system:

Windows

macOS

Linux

이 페이지는 인바이런먼트 쿼리 시스템(EQS) 에셋을 활성화, 생성, 편집하는 일반적 워크플로를 다룹니다. 

EQS 활성화하기

EQS로 작업을 시작하려면 프로젝트 세팅(Project Settings) 메뉴에서 EQS를 활성화해야 합니다.

  • 필요한 경우 세팅(Settings) > 플러그인(Plugins) 섹션에서 인바이런먼트 쿼리 에디터(Environment Query Editor) 옵션을 활성화합니다.

    인바이런먼트 쿼리 에디터 옵션을 활성화합니다

EQS 쿼리 생성하기

EQS 에셋을 생성하려면 다음 단계를 따릅니다. 

  1. 콘텐츠 드로어(Content Drawer) 에서 +추가(+Add) 버튼을 클릭하고 인공 지능(Artificial Intelligence) 에서 인바이런먼트 쿼리(Environment Query) 를 선택합니다. 

    콘텐츠 드로어에서 +추가 버튼을 클릭하고 인공 지능에서 인바이런먼트 쿼리를 선택합니다

  1. 새 EQS 에셋의 이름을 입력합니다. 

    새 EQS 에셋의 이름을 입력합니다

콘텐츠 드로어에서는 인바이런먼트 쿼리뿐 아니라 커스텀 제네레이터(Generator)컨텍스트(Context) 블루프린트 에셋도 생성할 수 있습니다.

EQS 쿼리 편집하기

EQS 에셋 내에서 제네레이터(Generator)를 사용하여 테스트되고 가중치가 적용될 위치 또는 액터를 생성하고, 컨텍스트(Context) 또는 레퍼런스 프레임을 제공하고, 테스트(Test)를 실시하여 제네레이터에서 어떤 아이템이 최선의 옵션인지 결정할 수 있습니다. 다음 섹션에서는 EQS 에셋 내에서 이것들을 생성하는 방법을 설명합니다.

제네레이터를 추가하려면 다음 단계를 따릅니다.

  • EQS 그래프를 우클릭하고 원하는 제네레이터 타입을 선택합니다.

    EQS 그래프를 우클릭하고 원하는 제네레이터 타입을 선택합니다

    제네레이터를 추가하고 루트 노드에서 드래그하여 제네레이터에 연결합니다. 

    루트 노드에서 드래그하여 제네레이터에 연결합니다

    루트에 제네레이터를 하나 이상 연결할 수도 있지만, 쿼리에는 가장 왼쪽 제네레이터만 사용됩니다.

테스트를 추가하려면 다음 단계를 따릅니다.

  • 제네레이터를 우클릭하고 추가할 테스트를 선택합니다. 

    제네레이터를 우클릭하고 추가할 테스트를 선택합니다

    테스트를 추가하면 제네레이터에 어태치되어 나타납니다. 테스트를 선택하여 디테일(Details) 패널에서 프로퍼티를 조정합니다. 

    테스트를 선택하여 디테일 패널에서 프로퍼티를 조정합니다

컨텍스트를 정의하려면 다음 단계를 따릅니다.

  • 테스트의 디테일 패널에서 EnvQueryContext 를 원하는 컨텍스트로 변경합니다. 

    EnvQueryContext를 원하는 컨텍스트로 변경합니다

    프로퍼티 이름은 테스트 타입에 따라 다를 수 있습니다. 자세한 정보는 테스트 페이지를 참조하세요.

EQS 쿼리 프리뷰하기

EQS 쿼리의 결과를 에디터 내에서 프리뷰할 수 있습니다. 가중치와 필터를 적용한 결과가 디버깅 구체로 표현됩니다. 

EQS 쿼리의 결과를 에디터 내에서 프리뷰할 수 있습니다

위 이미지에서는 레벨 내에서 플레이어 캐릭터에 대한 시야가 확보되는 위치를 반환하는 EQS 쿼리를 디버깅하고 있습니다. 

자세한 정보는 AI 디버깅 또는 EQS 테스팅 폰 페이지를 참조하세요.

비헤이비어 트리로 EQS 사용하기

EQS 쿼리를 생성한 다음에는 비헤이비어 트리(Behavior Tree) 내에서 태스크(Task) 의 일부로 쿼리를 실행할 수 있습니다.

  1. 비헤이비어 트리 내에서 우클릭하고 Run EQS Query 태스크 노드를 추가합니다.

    우클릭하고 Run EQS Query 태스크 노드를 추가합니다

  2. Run EQS Query 에서 실행할 쿼리 템플릿(Query Template) (원하는 EQS 에셋)과 반환할 블랙보드 키(Blackboard Key) 를 할당합니다.

    실행할 쿼리 템플릿과 반환할 블랙보드 키를 할당합니다

    반환되는 블랙보드 키는 가장 높은 가중치가 적용된 결과(오브젝트 또는 벡터)가 됩니다. 위 예시에서는 EQS 쿼리를 사용하여 플레이어의 위치를 찾고 그 위치를 MoveToLocation 이라는 블랙보드 키로 전달합니다. 

    쿼리 환경설정(Query Config) 옵션을 통해 EQS 에셋에 전달할 파라미터를 추가할 수도 있습니다.

네이티브 코드로 EQS 사용하기

EQS 쿼리는 일반적으로 비헤이비어 트리 내에서 실행되지만, 네이티브 코드에서 직접 사용하는 것도 가능합니다. 다음 예시는 특정 구역 내에서 캐릭터나 아이템을 스폰할 안전한 장소를 찾는 가상의 쿼리를 보여줍니다.

// 이 이름은 쿼리에 사용되는 변수의 이름과 일치해야 합니다
static const FName SafeZoneIndexName = FName(TEXT("SafeZoneIndex"));
static const FName SafeZoneRadiusName = FName(TEXT("SafeZoneRadius"));

// 구역의 인덱스 및 안전 반경을 베이스로 안전한 스폰 지점을 찾는 쿼리를 실행합니다
bool AMyActor::RunPlacementQuery(const UEnvQuery* PlacementQuery)
{
    if (PlacementQuery)
    {
        // 쿼리 요청을 구성합니다
        FEnvQueryRequest QueryRequest(PlacementQuery, this);

        // 쿼리 파라미터를 설정합니다
        QueryRequest.SetIntParam(SafeZoneIndexName, SafeZoneIndexValue);
        QueryRequest.SetFloatParam(SafeZoneRadiusName, SafeZoneRadius);

        // 쿼리를 실행합니다
        QueryRequest.Execute(EEnvQueryRunMode::RandomBest25Pct, this, &AFortAthenaMutator_SpawningPolicyBase::OnEQSSpawnLocationFinished);

        // 쿼리가 시작되었음을 나타내려면 true를 반환합니다
        return true;
    }

    // 쿼리가 시작되지 못했음을 나타내려면 false를 반환합니다
    return false;
}