UE4學習筆記 EQS系統

2021-10-03 23:48:38 字數 2444 閱讀 6621

eqs(environment query system),直譯為環境查詢系統,可以理解成對當前場景狀態的掃瞄或者檢查,往往配合ai行為樹一起使用。其實現原理比較好理解,簡單來說就是將場景環境劃分,一般來說是按密度劃分成乙個乙個點,當然也可以以場景元素actor來進行劃分,將環境劃分好後,再按照相應的設定規則對劃分項(點或actor)進行打分,最後得分最高的item即為系統所找到的最優查詢結果。eqs系統將其最優查詢結果告知ai,ai行為樹則會對來其進行相應的決策及執行。

使用eqs前我們最好知道eqs的都由哪些部分組成,各部分的分工都是什麼。虛幻4官方文件對其各個組成部分的名詞解釋已較為詳細,以下是本人對官方文件中名詞解釋的簡單整理:

eqs資產,我的理解乙個eqs資產就是乙個可供ai使用的eqs例項。它相當於是乙個容器,裡面裝著根據不同需求設計好的各種查詢規則(即genetators和tests)。我們做好乙個eqs資產後,最終,其會在ai的行為樹節點中例項化,並在行為樹節點執行時執行eqs相關功能,執行結果也會儲存為黑板變數供行為樹來決策使用。

取樣生成器規定了我們eqs的取樣點的生成規則。它以某一種規則在使用者周圍進行參考點選取,將選取的取樣點(可能是位置點也可能是actor)用於測試。

如圖,我們開啟建立好的環境查詢資產environmentquery後,在根節點下拉即可建立需要的genetators。目前引擎提供的genetators有以下這些:

測試規則的作用為對取樣生成器找到的取樣點進行打分或剔除,最後從通過所有測試規則的取樣點中找到打分最高的取樣點,即為eqs查詢到的最優結果。當我們在eqs資產中建立好取樣生成器genetators之後,就可以在genetators上新增各種tests,目前引擎提供了一下tests供使用:

每個tests還需設定其testpurpose,即測試目的,有以下三種:

查詢內容可配置在genetators或tests上,在測試節點中,針對不同的測試方式需要選取不同的參照物進行測試參與。context的功能便是提供參照物,拿取樣得到的每乙個點,分別與context進行測試比較,然後將結果以分數形式標記於取樣點。

envquerycontext預設提供了4種參照物返回方式:

eqs目前在虛幻4引擎中是還乙個測試功能,預設並沒有開啟。我們如需使用的話需提前手動開啟引擎eqs功能。具體方法如下:

建立aipawn、aicontroller及ai行為樹;

建立eqs資產(environment query);

在eqs資產中新增取樣生成器generators用於收集取樣點;

根據需求向generators中新增測試規則及envquerycontext;

行為樹中新增eqs查詢節點;

eqs查詢節點設定對應的eqs資產及結果黑板變數;

ai行為樹根據eqs結果黑板變數進行決策。

ue4的gameplaydebugger可在編輯器模式下實時顯示特定遊戲資料,我們可以通過它來檢視ai在使用eqs時環境查詢的實時資訊,包括eqs受擊到了哪些取樣點,以及每個取樣點通過tests的最終打分結果,十分直觀方便。

可以在edit - project setting - engine - gameplay debugger 進行相關設定。

當專案執行時,把準星對準ai,再按撇號鍵(回車鍵左邊那位),就可以開啟debugger(再按關閉),可以實時顯示某個ai當前的eqs環境資訊以及一些執行時狀態和行為樹執行流。

UE4學習筆記 Gameplay Classes

增加類 編輯器中有乙個類嚮導,可以生成類所需要的檔案和基礎巨集 標頭檔案由於ue4對c 做了擴充套件,實現了如序列化反射等特性,跟qt的做法類似 在 中加入一些巨集關鍵字,在編譯期間生成相應的c 因此,對於每個類來說,都有會生成乙個classname.generated.h的檔案 類宣告uclass...

UE4學習筆記 Gameplay Classes

增加類 編輯器中有乙個類嚮導,可以生成類所需要的檔案和基礎巨集 標頭檔案由於ue4對c 做了擴充套件,實現了如序列化反射等特性,跟qt的做法類似 在 中加入一些巨集關鍵字,在編譯期間生成相應的c 因此,對於每個類來說,都有會生成乙個classname.generated.h的檔案 類宣告uclass...

UE4學習筆記 Replication

actors 客戶端複製actor被spawn出來時,只有location和rotation在prebeginplay 和postbeginplay 時是合法的 被複製的actor只有在伺服器關閉他們的複製通道時才被銷毀 actor的屬性複製是可靠的.只會從伺服器往客戶端同步 freplicatio...