EQS의 기본 활용법
EQS의 제너레이터·컨텍스트·테스트로 후보 위치를 만들고 필터링·점수화해 AI 엄폐 지점을 선택합니다.
지난 절에서는 AI의 의사결정을 담당하는 비헤이비어 트리와 데이터 저장소인 블랙보드를 다뤘습니다.
비헤이비어 트리가 무엇을 할지를 정한다면, 이제는 어디서 어떻게 할지를 결정해야 합니다.
이를 위해 언리얼 엔진은 환경 쿼리 시스템(Environment Query System, EQS)을 제공합니다.
이번 절에서는 EQS 기본 개념과 AI의 환경 인지/선택 흐름을 정리합니다.
EQS란 무엇인가?
EQS (Environment Query System)는 AI가 주변 환경을 분석하고, 특정 기준에 따라 최적의 위치나 대상(Item)을 찾아낼 수 있도록 돕는 시스템입니다.
복잡한 환경에서 AI가 지능적인 의사결정을 내릴 수 있도록 지원하는 눈이자 탐색 도구라고 생각할 수 있습니다.
EQS가 필요한 이유- 지능적인 의사결정: AI가 단순히 플레이어를 따라가는 것을 넘어, 엄폐할 위치, 아이템을 주울 위치, 공격하기 좋은 위치, 도주할 경로 등을 스스로 판단하게 합니다.
- 복잡한 환경 분석: 게임 세계의 복잡한 지형, 오브젝트, 다른 AI 등을 고려하여 의미 있는 위치를 찾아냅니다.
- 다양한 조건 적용: 거리, 시야, 엄폐 여부, 주변 위험도, 특정 태그 유무 등 여러 가지 조건을 동시에 고려하여 최적의 대상을 필터링하고 점수를 매길 수 있습니다.
- 재사용성: 한 번 만든 쿼리는 다양한 AI 캐릭터에 재사용될 수 있습니다.
EQS의 핵심 구성 요소
EQS는 크게 다음과 같은 요소들로 구성됩니다.
환경 쿼리 에셋 (Environment Query Asset)
Environment Query에셋을 생성하고 EQS 에디터에서 쿼리 자체를 설계합니다. 여기에는 제너레이터(Generator), 컨텍스트(Context), 테스트(Test) 등이 포함됩니다.- 생성 방법: 콘텐츠 브라우저에서 마우스 오른쪽 버튼 클릭 >
인공지능(Artificial Intelligence)>환경 쿼리(Environment Query)선택 후 이름을 지정합니다 (예:EQS_FindCover).
제너레이터 (Generators)
- 쿼리를 실행할 때, 환경에서 어떤 항목(Item)들을 생성할지 결정합니다. 이 항목들이 나중에 점수 매기기 및 필터링의 대상이 됩니다.
-
예시
Points: Grid: 컨텍스트 주변 격자에 후보 위치를 생성합니다.Actors of Class: 지정 클래스의 액터를 검색합니다. 반경 제한 여부와 검색 중심을 설정합니다.Points: Circle/Points: Donut: 원둘레 또는 여러 고리 형태로 후보를 생성합니다.
컨텍스트 (Contexts)
- 제너레이터가 점을 생성하거나, 테스터가 조건을 검사할 때 필요한 기준점이나 참조 대상을 제공합니다.
-
예시
Querier: 이 Behavior Tree 예제에서는 쿼리를 실행하는 AI의 제어 Pawn.Item: 현재 테스트할 후보.- 사용자 정의 Context: 플레이어 또는 Blackboard의 목표를 반환하도록 구현합니다.
TargetActor라는 키가 있다고 같은 이름의 Context가 자동 생성되지는 않습니다.
- 사용자 정의 컨텍스트를 만들어 특정 액터나 컴포넌트를 기준으로 삼을 수도 있습니다.
테스터 (Testers)
- 제너레이터가 생성한 각 항목(Item)에 대해 다양한 조건을 테스트하고 점수를 매기는 역할을 합니다. 각 테스터는 특정 기준에 따라 항목을 필터링(Filter)하거나 점수(Score)를 부여합니다.
-
예시
Distance: 항목과 특정 컨텍스트(예: 플레이어) 간의 거리를 테스트합니다. (멀수록 좋은 엄폐 위치)Pathfinding: 경로 존재·비용·길이를 검사합니다.Trace: 후보와 Context 사이의 충돌을 검사하여 시야 차단 여부를 판단합니다.Dot: 두 방향의 내적을 비교합니다.
블랙보드 (Blackboard)
- EQS가 찾아낸 최적의 위치나 대상을 블랙보드 키에 저장합니다. 이후 비헤이비어 트리에서 이 블랙보드 키의 값을 사용하여 AI의 행동을 지시합니다. (예:
BestCoverLocation키에 EQS 결과 저장)
EQS 기본 활용법: 엄폐 위치 찾기 예시
플레이어에게 공격받을 때 AI가 엄폐할 위치를 찾는 EQS를 만들어봅시다.
목표: AI 주변에서 플레이어에게서 멀고, 플레이어의 시야를 가려주는 엄폐물 뒤의 위치를 찾습니다.
EQS 에셋 생성
- 콘텐츠 브라우저에서
EQS_FindCover라는 이름으로Environment Query에셋을 생성합니다. - 에셋을 더블클릭하여 EQS 에디터를 엽니다.
플레이어 Context 생성
- 콘텐츠 브라우저에서
EnvQueryContext_BlueprintBase를 상속하는BP_PlayerCharacter_Context를 만듭니다. Provide Single Actor를 오버라이드하여 유효한Get Player Character(0)를 반환합니다. 이 예제는 로컬 플레이어 1명 기준이며, 멀티플레이에서는 Querier에 맞는 목표를 선택해야 합니다.
후보 생성
- EQS의 Root에
Points: Grid를 연결하고Generate Around = Querier,Grid Half Size = 1000,Space Between = 200으로 설정합니다. 단위는 cm이며 정사각형 격자입니다. - Projection Data를 해당 NavMesh에 맞춥니다. 투영만으로 AI에서 각 후보까지의 도달 가능성이 보장되지는 않습니다.
필터와 점수 설정
- Generator에
Pathfinding테스트를 붙이고Path Exist, Context는Querier,Path from Context = true,Filter Only,Bool Match = true로 도달 가능한 후보만 남깁니다. Trace테스트는 Context를BP_PlayerCharacter_Context, 채널을Visibility, 형태를 Line,Only Blocking Hits = true로 설정합니다.Filter Only와Bool Match = true로 두 지점 사이가 가려진 후보를 남깁니다. Item/Context Height Offset을 눈·엄폐 높이에 맞추고 바닥이나 자기 몸을 차폐물로 오인하지 않는지 확인합니다.Distance테스트의Distance To는 플레이어 Context,Test Purpose는Score Only,Scoring Equation은Linear,Scoring Factor는 양수로 둡니다. 이 예제는 남은 후보 중 먼 위치에 높은 점수를 줍니다.Inverse Linear는 같은 양수 가중치에서 가까운 쪽을 선호합니다.- 레벨의 EQS Testing Pawn에 쿼리를 지정하여 후보·필터·점수를 확인합니다. 후보 집합과 설정 안에서 고르는 결과이며 엄폐 안전성을 전역적으로 보장하지 않습니다.
비헤이비어 트리에서 EQS 실행
BT_EnemyAI비헤이비어 트리를 엽니다.Selector또는Sequence노드 뒤에Run EQS Query태스크 노드를 추가합니다.-
디테일 패널
Query Template:EQS_FindCover(생성한 EQS 에셋)Blackboard Key:BestCoverLocation(블랙보드에 미리 생성한Vector타입 키)Run Mode:Single Best Item(가장 높은 점수를 받은 하나의 항목만 반환)
Run EQS Query가 성공할 때 결과 위치를 사용합니다. 후보가 모두 탈락하면 실패하므로 같은 Sequence의 다음Move To를 실행하지 않고 대기·목표 재선택 분기로 돌아가게 합니다.- 이후
Move To태스크 노드를 추가하고Blackboard Key를BestCoverLocation으로 설정하면, AI가 찾아낸 엄폐 위치로 이동하게 됩니다.
EQS 활용 시 고려사항
- 성능: EQS는 런타임에 계산을 수행하므로, 너무 많은 항목을 생성하거나 너무 복잡한 테스터를 사용하면 성능에 영향을 미칠 수 있습니다. 필요한 만큼만 최소한의 제너레이터와 테스터를 사용하도록 최적화해야 합니다.
- 디버깅: EQS 에디터의 시뮬레이션 기능과 디버그 옵션은 쿼리가 어떻게 작동하는지 이해하고 문제를 해결하는 데 매우 중요합니다.
- 컨텍스트의 중요성: AI의 위치, 목표의 위치, 특정 지점 등 쿼리의 기준이 되는 컨텍스트를 정확하게 설정하는 것이 중요합니다.
- 커스텀 테스터/제너레이터: 복잡하거나 특정 게임에 특화된 로직이 필요할 경우, Generator와 Context는 블루프린트로 확장할 수 있고, 사용자 정의 Test는 C++로 구현합니다.
EQS는 AI가 게임 환경을 능동적으로 분석하고, 단순히 정해진 길을 가는 것을 넘어 전략적이고 지능적인 움직임을 보여주게 만드는 핵심 도구입니다.
복잡한 AI 행동을 구현할 때 비헤이비어 트리와 함께 EQS를 적절히 활용하는 것이 중요합니다.