發表文章

目前顯示的是 11月, 2020的文章

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 b

Editor內Blueprint中斷點沒有觸發

最近在做功能的時候遇到了有趣的問題。 其實以前就偶爾有遇到但是沒有認真找原因,因為發生的機會其實很低。 這次很幸運的找到問題的原因,所以分享一下 問題發生的現象 在解決問題之前,先描述問題的定義 在BP下中斷點 無論如何都不會停下來 但是在中斷點前或後面的節點下PrintString確定會印,功能也都正常 就只是斷點不會停 如果這個BP是從C++呼叫的話 C++的斷點是會停的。 問題的原因 追查發現ScriptCore.cpp 在執行BP的breakpoint 之前 會檢查現在是不是在GameThread 如果有在Game Thread才會觸發中斷點 剛好我這次的功能是從muti-threading的animation事件過來的 CallStack直接看到有Update_AnyThread的字眼 所以下次如果再遇到類似的現象 可能要想一下是不是因為multi threading造成的~ 相關程式碼 ScriptCore.cpp FBlueprintCoreDelegates::ThrowScriptException裡面的 if (IsInGameThread()) {     OnScriptException.Broadcast(ActiveObject, StackFrame, Info); }