UE4 Navigation Mesh 心得


UE4的Navigation Mesh 如果照著網路上的教學做,大概都可以建的出來。

A.I.角色也都能夠在上面正常行走。


不過應用稍微有點變化的時候就會碰上一些問題,在這邊先介紹過去遇過的項目


名詞與縮寫說明


NavMesh: Navigation Mesh

NBV: Navigation Bounds Volume,用來定義navigation mesh的範圍。

P-Level: Persistent Level。 主地圖。

Sublevel: 放置於主地圖下的子地圖。


如何調整NavMesh的大小


雖然一般都會調整NBV的scale,不過並不建議這麼做。

Volume類型的個人都建議調整Brush內的大小,不要改Actor的scale。


NavMesh到底存在哪邊?


NavMesh實際上存在於有NBV的場景的umap內。

不是場景的BuiltData,也不一定是主地圖。


舉例來說

主地圖    (1個NBV)

    sublevel1 (0個NBV)

sublevel2 (0個NBV)

sublevel3 (2個NBV)

當Build完NavMesh之後,主地圖與sublevel3都需要存檔。


我可以在Build的時候排除sublevel嗎?


可以,在Build之前把sublevel設隱藏的話,就可以排除掉,如下圖所示

sublevel隱藏的時候Build Path,就不會排除方塊(圖1.)。

sublevel顯示的時候Build Path,會排除方塊(圖2.)。


圖1. 隱藏Sublevel build path



圖2. Sublevel1內的方塊被考慮進去並視為不可行走。 


有Nav Mesh刪不掉


有的時候會看到場景裡面有不該存在的Nav Mesh,而且不管怎麼重Build都刪不掉。

我找到了重現步驟如下:


1. 開啟一個新的Level File->NewLevel->Default

2. 放置Nav Mesh Bounds Volume (NBV) 於場景內,並與地板有交疊。


3. Build->Build Paths (或是引擎自己會auto build navigation)

4. 確認Nav Mesh有出現

5. 直接刪除步驟2的NBV

6. Build->Build Paths (或是引擎自己會auto build navigation)

7. Bug發生,Nav Mesh不會因為NBV刪掉而消失




解決上面的問題的步驟:

1. 放置Nav Mesh Bounds Volume (NBV) 於場景內,並與地板無交疊。


2. Build->Build Paths (或是引擎自己會auto build navigation)

3. 確認Nav Mesh消失

4. 刪除步驟1的NBV

5. 完成


這個問題看起來只要確認,在刪地圖內最後一個NBV之前有確保NavMesh有清除,再刪掉NBV就好。

但是實際上有很多問題


如果有很多sublevel,這個確認就會變得非常浪費時間。

總共要做下面幾件事:


對所有sublevel

  如果sublevel沒有NBV

    放置NBV於不會產生NavMesh的地方

Build Paths

sublevel存檔



NavMesh能不能存放在streaming的sublevel


非Always loaded的sublevel,例如Blueprint可控制的sublevel,或是World Composition模式的sublevel。

都必須遵照以下的步驟設定,中間步驟有少或是出錯都會有問題。


後果有以下幾種現象,我都遇過

NavMesh直接消失

Editor看的到,執行Play in Editor看不到NavMesh

關掉Editor重開後就看不到NavMesh

每次執行NavMesh都不一樣,有時位置錯,有時有些區域沒出來。


正確設定Streaming sublevel的NavMesh


1. 放置一個NBV在P-Level中,可以不需要跟任何東西交集。之後都不可刪掉此NBV。

2. 選擇P-Level內自動產生的RecastNavMesh Actor。

3. Runtime Generation 設為Static。

4. Fixed Tile Pool size設為true。

5. Tile Pool size有可能需要隨著地形大小調大。

6. 在子地圖放置NBV。


注意事項


Fixed Tile Pool size設為true以及Tile Pool size改變過後,請重build nav mesh。

你也不能單獨打開子地圖,對任何子地圖Build Path後存檔。

一旦這麼做,在讀主地圖的時候就會產生兩個以上的RecastNavMesh Actor(主地圖+子地圖)

然後就會錯亂,NavMesh就不正常了。


因為這個原因,個人極度不建議在這種使用情境打開auto build navigation的功能,

只要有人單獨編輯子地圖,觸發Build Path並存檔,這樣那個子地圖的NavMesh就會壞了。




留言

張貼留言

這個網誌中的熱門文章

UE4 除錯技巧分享 (一)

UE4 GameplayAbilitySystem - GameplayEffect & GameplayCue 如何設定參數

UE4 GameplayAbilityTask介紹