[UE] EQS
EQS(Environment Query System)는 개발자들이 게임 세계의 환경에 대한 복잡한 쿼리를 수행할 수 있게 해주는 언리얼 엔진의 강력한 도구이다. EQS는 AI 행동 트리와 연계해 사용하도록 설계돼 게임 내 AI 에이전트의 빠르고 효율적인 의사결정이 가능하다.
목차
EQS (Environment Query System)
EQS(Environment Query System)는 개발자들이 게임 세계의 환경에 대한 복잡한 쿼리를 수행할 수 있게 해주는 언리얼 엔진의 강력한 도구이다. EQS는 AI 행동 트리와 연계해 사용하도록 설계돼 게임 내 AI 에이전트의 빠르고 효율적인 의사결정이 가능하다.
EQS를 사용하여 개발자는 "가장 가까운 적은 어디인가?" 또는 "근처에서 가장 안전한 커버는 무엇인가?"와 같은 게임 세계에 대한 질문을 작성할 수 있다 이러한 쿼리는 게임 및 AI 에이전트의 특정 요구에 맞게 사용자 지정할 수 있다.
EQS 쿼리는 비주얼 에디터를 사용하여 생성할 수 있으므로 개발자가 코드를 작성할 필요 없이 복잡한 쿼리를 쉽게 설계할 수 있다. 이 편집기를 사용하면 개발자는 미리 구축된 쿼리 유형의 범위에서 선택하거나 규칙과 점수 시스템의 조합을 사용하여 자신만의 사용자 지정 쿼리를 만들 수 있다.
쿼리가 생성되면 AI 행동 트리에서 사용하여 AI 에이전트에게 의사 결정 기능을 제공할 수 있다. 예를 들어 AI 에이전트는 쿼리를 사용하여 화재 진압에 사용할 최적의 커버를 식별하거나 가장 가까운 헬스 팩을 찾을 수 있다.
전반적으로 EQS는 개발자가 게임에서 정교한 AI 동작을 만들 수 있도록 하는 강력한 도구로, 보다 몰입적이고 도전적인 게임 플레이 경험을 제공한다.
0. BP_Enemy - StateComponent |
0. BP_AIController_EQ | 0. BB_AI 0. BT_EQ |
1. BP_Enemy_AI - WeaponComponent - MovingComponent - BehaviorTree (Behavior Tree) |
--------------------- 0. BP_ --------------------- |
1. BTService_ |
2. BP_Enemy_AI_EQ | ------------------------- 0. EQExam ------------------------- |
2. BTTask_ 2. BTTask_ 2. BTTask_ |
BP_Enemy_AI_EQ
BP_AIController_EQ
BT_EQ
생성
BP_Enemy_AI_EQ 생성
BP_Enemy_AI을 상속받는 BP_Enemy_AI_EQ 생성
- Behavior Tree: BT_EQ 지정
- Pawn - AI Controller Class - BP_AIController_EQ 지정
BB_AI - 새 키 추가(EQ_Location)
- 새 키 추가: EQ_Location (Vector)
- 위치를 다루는 키값을 추가해서 EQS에 활용한다.
EnvQueryContext_Player 생성
Blueprint Class - EnvQueryContext_BlueprintBase - EnvQueryContext_Player 생성
- EnvQueryContext_BlueprintBase는 EnvQueryContext를 상속받는다.
Provide Single Actor (const)
- 함수 오버라이드로 Provide Single Actor를 생성한다.
- 참고)
- Provide Actors: 여러개의 Actor를 주어 판단하겠다.
- Provide Locations: 여러개의 Location을 주어 판단하겠다.
- Provide Single Actor: 하나의 Actor를 주어 판단하겠다.
EQ_Exam 생성
Quarrier = 질의하는 주체. 주로 Enemy_AI로 설정한다.
- Generator: 질의하는 공간을 설정해준다.
- Grid Half Size: Grid 반 사이즈. 1000.0이면 2000.0 크기의 그리드가 생성된다.
- Data Binding: 외부에서 EQS에 변수로 줄 때 식별자로 사용.
- Query Params: 외부에서 EQS에 변수로 줄 때 식별자로 사용.
- Random number: Min~Max 사이의 랜덤값으로 그리드가 그려진다. 그리드가 실시간으로 변경된다.
- Data Binding: 외부에서 EQS에 변수로 줄 때 식별자로 사용.
- Space Between: 100 단위로 아이템(그리드 구형 모양)이 깔린다.
- Grid Half Size: Grid 반 사이즈. 1000.0이면 2000.0 크기의 그리드가 생성된다.
- Test
- Test Purpose
- Filter Only: 필터링만 사용. 사용할 일 거의없음.
- Score Only: EQS 점수를 도출하여 점수값을 사용한다. 예를들어, 가장 높은값을 목적지로 설정하게 만들어 Enemy를 이동시키게 할 수 있다.
- Filter and Score: Filter와 Score 방식 모두 사용. 점수를 매긴 후 필터링하여 값을 사용한다.
- Test Purpose
- Distance
- Test Mode: Distance 2D, Distance 3D, Distance Z가 있다.
- Distance To: Querier의 거리를 판단한다.
- 필터
- Filter Type: Range(범위 설정), Minimum(최소값 설정), Maximum (최대값 설정)
- ex. Minumum 300.0이면 거리 300.0 이하인 EQ를 잘라내겠다는 의미.
- 필터링 된 곳은 뷰포트에 파란색으로 표시되며 거리를 연산하지만 점수는 매기지 않는다.
- Filter Type: Range(범위 설정), Minimum(최소값 설정), Maximum (최대값 설정)
- Score
- Clamping
- Score Equation
- Inverse Linear: 가까운 곳부터 찾겠다. 점수: 가까운곳 1. 가장 먼곳 0.
- Score Factor: 점수 범위
- ex. Score Factor가 5.0이면 0~5.0 사이의 점수값을 갖는다.
- Score Equation
- Clamping
Line A와 Line B를 내적한다. 내적의 범위는 -1~1이다. 하지만 여기서의 결과값은 0~1이다.
- Line A
- Line From: 중심이 되는 주체.
- Line To: 라인을 쏘는 방향. ex. Item, Player
- LIne B
- Line From: 중심이 되는 주체.
- Line To: 라인을 쏘는 방향. ex. Item, Player
- Absolute Vale
- 체크 Off: 앞뒤 0, 좌우 1.
- 체크 On: 앞뒤 1. 좌우 0.
- 주의 ※ Scorioing Factor 값이 변하면 값의 범위는 0 ~ (1 * Scoring Factor)값이다.
Score
- Linear: 정면 1, 후면 0
- Inverse Linear : 정면 0, 후면 1
- Trace Data
- Trace Channel: Visibility
- Trace Shape: Line, Box, Sphere, Capsule
- Trace가 닿는지 검사할 때 사용하는 모양이다.
- LIne이 간단하여 많이 사용하나 정밀한 계산이 필요할 때는 다른 모양도 사용한다.
- Bool 일치: 값이 뒤집어진다. 0이 1이 되고 1이 0이 된다.
Line Trace를 사용하여 벽과 같은 장애물로 보이지 않는 공간을 체크할 수 있다.
BT_EQ
Run EQS Query
- Node: 수정할일 없다. UE5에서는 항목에서 빠졌다.
- 블랙보드
- Blackboard Key: 공간 질의해서 리턴된 Key값
- Query Template: 만들어준 Query Template을 넣어준다.
실행화면
키보드 조작법
- ' : 정보 뷰포트에 출력
- 3 : EQS 뷰포트에 출력. 작은 구형모양으로 나온다. EQS 범위 내에 없으면 보이지 않는다.
EQS - Range
EQ_Avoid 생성
인공지능 - 인바이러먼트 쿼리 - EQ_Avoid 생성
On Circle: EnvQueryContext_Player 중심으로 항목을 원형으로 생성
- Data Binding: Random number 설정
- Min: 800.0
- Max: 1200.0
- Space Between: 200.0
- Points on Circle Spacing Method: By Space Between 설정
- 원 중앙: EnvQueryContext_Player 설
BT_Range - EQS Query 추가
EQS
- EQS Request
- Query Template: EQ_Avoid 설정.
- Query Config
- Run Mode: Single Random Item from Best 25%로 설정 (=점수 상위 25% 내에서 선택하겠다)
실행화면
- BP_Enemy_Range가 BP_Player 뒤쪽의 공간으로 Warp 이동.
ABP: Animation Blueprint
AN: Blueprint Class AnimNotify
ANS: Blueprint Class - AnimNotifyState
AO: Aim Offset
BP: Blueprint Class
BS: Blend Space
BF: Blueprint Function Library
CS: Matinee Camera Shake
E: Enum 열거형
DT: Data Table
F: 구조체
I: Blueprint Interface
WB: Widget Bluepprint
UE2212_02
Level - LEVEL ABP_Player BP_GameMode BF_Helper IDamage |
|||
AdvancedMagicFX12 |
Materials | ||
Meshes | |||
Particles | |||
Textures | |||
Character | Animation | Bow | |
Common | |||
Fist | |||
Hammer | |||
Parkour | |||
Sword | |||
Unarmed | |||
Wizard | |||
BlendSpaces | BS_Bow BS_Fist BS_Hammer BS_Sword BS_Unarmed BS_Wizard |
||
Materials |
MaterialLayers |
||
M_UE4Man_Body M_UE4Man_ChestLogo |
|||
Mesh | SK_Mannequin SK_MAnnequin_PhysicsAsset Skel_Mannequin |
||
Montages |
Around | Around_Montage | |
Bow | AR_DrawBow_Montage AR_ShootAndDraw_Montage |
||
Common | HitReaction_Move_Montage HitReaction_Stop_Montage |
||
Fist | Fist_Attack_1_Montage Fist_Attack_2_Montage Fist_Attack_3_Montage Fist_Hitted_Montage |
||
Hammer | Frank_RPG_2Hand_Combo01_1_Montage Frank_RPG_2Hand_Combo01_2_Montage Frank_RPG_2Hand_Combo01_3_Montage Frank_RPG_2Hand_Combo01_4_Montage |
||
Parkour | Run_Climb_Montage | ||
Sword | Draw_Sword_Montage Sword_Attack_1_Montage Sword_Attack_2_Montage Sword_Attack_3_Montage |
||
Warp | Warp_Montage | ||
Enemy_DeadFall_Montage HitReaction_Montage |
|||
Textures | UE4_LOGO_CARD UE4_Mannequin__normals UE4_Mannequin_MAT_MASKA UE4Man_Logo_N |
||
Weapons | Elven Bow | ||
Greate Hammer | |||
Sword |
|||
Component | EStateType MovingComponent StateComponent WeaponComponent FeetComponent TargetComponent |
||
Effects | P_Cube_Mesh_Test P_Genno_Weapon_Lightning_01 |
||
Enemies | Basic | BP_AIController_Basic BP_Enemy_AI_Basic BT_Basic BT_Move |
|
EQ | BP_AIController_EQ BP_Enemy_AI_EQ BT_EQ EQ_Exam |
||
Melee | BP_AIController_Melee BP_Enemy_AI_Melee BP_PatrolPath BT_Melee BTService_Melee BTTask_Patrol PatrolComponent |
||
Tasks | BTTask_Speed BTTask_Equip |
||
BB_AI BP_Enemy BP_Enemy_AI |
|||
Environment |
Materials | Textures | |
Meshes | |||
Obstacle | |||
InfinityBladeEffects |
Effects |
FX_Combat_Base | |
FX_Materials | |||
FX_Meshes | |||
FX_Monsters | |||
FX_Textures | |||
FX_Textures_IB | |||
Masters | |||
Materials | M_Mesh M_White_Inst M_Red_Inst M_Green_Inst M_Blue_Inst M_UE4Man_Body_Inst M_UE4Man_ChesLogo_Inst |
||
Meshes | Cone_2 Cube_2 Cylinder_2 Sphere_2 |
||
Notifies | ANS_Equip ANS_Combo ANS_Collision AN_BeginAction AN_EndAction AN_CameraShake AN_End_BowString AN_EndParkour |
||
Parkour | EParkourArrowType EParkourType FParkourData ParkourComponent ParkourData |
||
Player | BP_Player FZoomData |
||
Sounds | S_BGM S_HitPunch S_OneHand_Hit |
||
Textures | Crosshair T_Around T_Black T_Bow T_Fireball T_Fist T_Hammer T_Sword T_Warp |
||
Weapons |
Around | Around_FireBall Around_FireBall1 Around_IceBall Around_IceBall1 DT_DoAction_Around DT_Equip_Around DT_HitData_Around Skill_Around Weapon_Around |
|
Bow | AO_Aim Curve_Aim DT_DoAction_Bow DT_Equip_Bow DT_HitData_Bow FAimData Skill_Aim Skill_Arrow Weapon_Bow |
||
FireBall | DT_DoAction_FireBall DT_Equip_FireBall DT_HitData_FireBall Skill_FireBall Weapon_FireBall |
||
Fist | Combo_Fist - Blueprint Class Actor Weapon_Combo 상속 CS_Fist DT_DoAction_Fist DT_Equip_Fist DT_HitData_Fist |
||
Hammer | Combo_Fist - Blueprint Class Actor Weapon_Combo 상속 CS_Hammer DT_DoAction_Hammer DT_Equip_Hammer DT_HitData_Hammer |
||
Sword | Combo_Sword - Blueprint Class Actor Weapon_Combo 상속 CS_Sword DT_DoAction_Sword DT_Equip_Sword DT_HitData_Sword |
||
Warp | Weapon_Warp - Blueprint Class Actor Weapon 상속 DT_DoAction_Warp DT_Equip_Warp |
||
EWeaponType FDoActionData FEquipData FHitData Weapon - Blueprint Class Actor Weapon_Combo - Blueprint Class Actor Weapon 상속 M_Weapon Skill |
|||
Widget | WB_CrossHair WB_Menu WB_MenuButton WB_Name |
'⭐ Unreal Engine > UE RPG Blueprint' 카테고리의 다른 글
[UE] Behavior Tree 4, Melee Attack & Range (0) | 2023.02.23 |
---|---|
[UE] Behavior Tree 3, Spline(Bezier, Catmull-Rom) (0) | 2023.02.22 |
[UE] Behavior Tree 2 (0) | 2023.02.21 |
[UE] Behavior Tree (0) | 2023.02.20 |
[UE] Widget, Widet 내 텍스트 설정 (0) | 2023.02.17 |
댓글
이 글 공유하기
다른 글
-
[UE] Behavior Tree 4, Melee Attack & Range
[UE] Behavior Tree 4, Melee Attack & Range
2023.02.23 -
[UE] Behavior Tree 3, Spline(Bezier, Catmull-Rom)
[UE] Behavior Tree 3, Spline(Bezier, Catmull-Rom)
2023.02.22 -
[UE] Behavior Tree 2
[UE] Behavior Tree 2
2023.02.21 -
[UE] Behavior Tree
[UE] Behavior Tree
2023.02.20