Unreal Avoidance系統(下)

在上篇 我們提到使用Unreal內建的Detour迴避有一些限制 這些限制主要是純BP專案無法透過C++修改行為造成的。 所以本篇是以C++專案為基礎,說明如果要使用Detour的功能,可能要做哪些修改才能達到。 需要注意的是這篇文章為了重現當初改寫時遇到的過程,會有大量的文字描述,沒興趣的話應該會啃不下去。 但是裡面有一些遇到問題的解法,對解題過程有興趣的人可以看看,或是有更好的建議也歡迎~ 本篇會介紹下面幾個項目,可以先看看有沒有你要的內容再繼續~ 1. 為什麼要複寫CrowdManager 2. 繼承並複寫CrowdManager 3. 在執行時期更改AvoidanceGroup 為什麼要複寫CrowdManager 這是個很冗長的流程,當初我發現RVO可以動態透過API修改Avoidance Group, 但是用CrowdPathFollowingComponent(以下簡稱CPFC)卻不行時,我也是嚇了一跳。 於是我跑去追CPFC的程式碼,發現要修改Detour迴避行為的函式全部都被定義為private(圖1), 然後標頭檔的最後標示了CPFC的friend class是 CrowdManager。 顯示即使繼承CPFC也沒辦法改寫迴避的行為,設定全部都必須要透過CrowdManager處理。 圖1. 設定Detour的函式都是private。 然後跑去CrowdManager挖程式碼,卻發現CPFC那些設定相關的函式都沒被用到... 代表要繼承CrowdManager才能達到我希望能修改迴避參數的目標。 繼承並複寫CrowdManager 首先當然就是先繼承CrowdManager: 在Unreal Editor->New C++ Class->Show all classes 輸入CrowdManager,並選擇CrowdManager,輸入名字與路徑就可以完成繼承。 在Edit->Project Settings->Engine->NavigationSystem內有CrowdManagerClass 將此欄位指向剛剛創好的MyCrowdManager。可參考圖2 圖2. 在Engine設定CrowdManagerClass為自己複寫的cl...