[C++/UE] UE5中AI開發的一點功能梳理(九) – Environment Query System(EQS)Test說明以及運行、調試

Test說明

  • 所有Test都會在每一個Item上運行
Test公有參數說明
  • Test Purpose:Filter Only / Score Only / Filter And Score
  • Filter用於決定那些測試點會被直接裁切掉
  • Score根據Test的性質,給每個測試點賦予分數權重
    • 如Distance的測試,就會根據Test Point 距離指定Context的遠近作為自變量
Distance
  • 以與目標(Distance To)的距離為參數進行測試
Dot
  • 根據兩個向量的點積進行測試
  • 兩個向量可以分別是Context的Rotation向量或A Context到B Context的向量
  • 一般來說,Two Points的配置中,會使用目標Context作為Line From,EnvQueryContext_Item作為Line To
    • 由於EnvQueryContext_Item指的是具體生成出來的每個測試球,因此就能知道每個測試球與目標Context的點積結果
  • 如果指定的是目標Context到Querier的話,就會導致所有測試球的結果都是相同的,因為它們顯示的,都是Context到Querier本身的點積測試結果,而不是Context到每個球的點積測試結果
Gameplay Tags
  • 匹配特定Tag
  • Reject Incompatible Items 如果為true,當對象Actor沒有實現IGamePlayTgAsset接口,就會直接忽略;否則就會正常檢測到並賦予0分或者是過濾掉
Overlap
  • 判斷每個點在特定形狀(Overlap Shape)的一定範圍內是否有與其他指定Channel(Overlap Channel)的Actor接觸
  • Extent X/Y/Z:每個Item上的檢測範圍尺寸
  • Shape Offset:檢測範圍偏移
  • Only Blocking Hits:false的就會把Trigger也加入檢測
Volume
  • 但是可以支持自定義體積形狀的指定(Volume Context / Volume Class)
Pathfinding(Batch)
  • 根據導航網格提供的訊息進行測試(路徑存在/路徑成本/路徑長度)

Trace

  • 使每個測試球向目標(Context)發射 或 讓目標向每個測試球發射射線(if Trace From Context == true),返回兩者之是否存在遮擋,有遮擋返回1
  • 可按需調整目標Context和每個測試球Item的測試高度偏移(Context Height Offset / Item Height Offset)
Project
  • 主要用於調整測試點位置,讓測試球在上下一個投射範圍中檢測導航網格或者地形通道,接觸到覆蓋點就修正採樣點至該位置

EQS的啟動

  • blueprint調用
    • 接入Run EQS Query節點
  • behavior tree調用
    • 接入Run EQS Query節點
      • EQS返回的是位置信息,因此Blackboard Key需要一個AI知道後會考慮移動過去的Vector Key
    • RunMode:Item指的是EQS返回的可行點列表中的每一個點
    • 每次Run EQS Query都會導致一次測試點的生成以及每個點上的Test執行發生

調試

  • 編輯時點撃P,顯示Navmesh的相關調試訊息
    • 具體細節顯示可在Project Settings -> Navigation Mesh -> Display裡編輯
  • 運行時點撃apostrophe s,打開運行時的AIDebug面板,根據需求點撃小鍵盤上的0 ~ 5,顯示不同的Detail