UE4 行為樹與EQS
阿新 • • 發佈:2020-09-06
行為樹
-
需要建立AIController藍圖,使被AI控制的模型
-
黑板:存放變數
-
行為樹:執行邏輯
-
NavMeshBoundVolume:AI移動的範圍,需要建立導航網格設定移動範圍,(檢視NavMesh的快捷鍵:P)
-
行為樹是從上到下,根節點向下執行,是從左到右執行相同層次的節點
-
這是一個簡單的行為樹
Composites:Selector,Sequence,SimpleParallel
Selector(選擇):Selector 節點從左至右執行其子項,其中一個子項達成後將停止執行其子項。如 Selector 的子項達成,則 Selector 也達成。如 Selector 的所有子項未達成,則 Selector 未達成。 Sequence (序列):節點從左至右執行其子項,如其中一個子項未達成,將停止執行執行其子項。如子項未達成,則 Sequence 也未達成。如 Sequence 的所有子項均達成,則 Sequence 也達成。 (感覺Selector和Sequence的區別就在於是 ”或“ 和 ”且“ 的關係) SimpleParallel(並行):所有子節點都執行一遍。
Decorators,Services,Tasks
Services: 定時執行一個操作,通常在根節點下的selector中執行,可以定時檢查操作,常用於檢查和更新黑板
Decorators:條件語句,附著雨一個Composite或者Task節點,並定義樹中的一個分支或單個節點是否可以執行
Tasks:Task 是真正“執行”操作的節點,如移動 AI,或調整黑板值。
-
播放動畫
-
首先設定好動畫藍圖,人物運動動畫來回切換,然後通過行為樹修改人物設定的狀態,通過行為樹執行播放相應的動畫
-
UE4處理併發行為的三個優點
明確:使用服務節點和簡單平行節點創造的樹更簡明,易於觀察和理解。 除錯簡單:圖表更清晰,便於糾錯。此外同時執行路徑更少,更易於觀察正在執行的內容。 更易於優化:由事件驅動的圖表如果沒有同時執行大量子樹,將更易於優化。
EQS
-
EQS全稱:Environment Query System,官方介紹是給虛幻提供給AI,用於收集環境資料測試分析,尋找到最符合測試的結果,EQS幫助AI篩選玩家的位置資訊,將周圍進行打分,選最高分或最低分,給AI選擇更合的結果。
-
開啟Edit–Editor Preferences–搜尋框EQS,然後勾選“Environment Querying System”,然後AI框裡會多一個EQS藍圖
-
生成器介紹
Distance:距離測試節點,將選擇器選取的點用給予和參照內容進行距離測試。距離越遠則分值越大,如果希望越近分值越大請調整Score中的Scoring Equation,將線性遞增改為遞減(Inverse Linear)。 Dot:使用點乘的方式,為選取點打分,值域範圍0-1(點乘有負數,打分無負數,正面為1,背面為0,呈現扇形左右遞增向1)。也可以對結果進行絕對值設定(勾選Absolute Value,結果為點乘後絕對值值域0-1,正面1,背面1,左右兩邊0)。點乘中的向量選取可以使用兩點方式或是Rotation方式。 Gameplay Tags:使用標籤進行詢問測試(GamePlay Tags本身是為Actor查詢操作提供分層,一般用於查詢。關於GT使用,我後期會出一篇文章介紹) Overlap:在取樣點,使用通道檢測方式,返回是否有符合通道標記的內容存在。如存在返回1,反之返回0。檢測形狀,Box,Sphere,Capsule。用於檢測查詢某一個點附近是否存在某一樣東西。 Pathfinding:將取樣點與內容進行導航尋路器測試,可達則分數1,不可達為0。它將用於最終測試點生成,返回一個可達測試點。 Pathfinding Batch:將取樣點與內容進行導航尋路器測試,可達則分數1,不可達為0。它會返回所有可達點,供下個測試專案使用。 Project:投射測試。可以用來修正生成器取樣點位置。兩種模式:導航投射,在取樣點為基準,垂直向上向下進行導航檢測,碰到導航覆蓋點則修正取樣點位置。形狀檢測,不考慮導航,只要在通道碰撞成立,則修正取樣點到新的位置。 Trace:射線測試。用來測試取樣點,到Context參照點之間是否存在遮擋,這是重要節點,一般可以用來尋找可以用來躲避的取樣點(從取樣點到敵人之間存在遮擋則認定可以躲避)。存在遮擋分數為1,不存在為0。注意:需要考慮高度問題,取樣點一般均在地面,從地面直接發射射線到Context可能會出現被非常矮的物體阻擋,可以通過調整Height Offset解決此問題。
總結
- EQS可以和行為樹相結合使用,可以實現更好的AI邏輯,相對減少了工作量,EQS內容相對較少,但是理解不是那麼容易,需要手動操作實踐。