[C++/UE] UE5中AI開發的一點功能梳理(九) – Environment Query System(EQS)Test說明以及運行、調試Programming Notes, DevNotes / By LoneliNerd / 2024 年 3 月 30 日 2024 年 3 月 30 日 Test說明所有Test都會在每一個Item上運行Test公有參數說明Test Purpose:Filter Only / Score Only / Filter And ScoreFilter用於決定那些測試點會被直接裁切掉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匹配特定TagReject 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