發表文章

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

Import RealWorld Landscape to UE4

圖片
簡介 從真實世界地形資料匯入遊戲引擎是蠻常見的需求, 這次剛好有機會在UE4試試看這個功能, 沒想到遇到地形交界處接不起來的問題, 最後找到問題點,所以順便分享作法。 https://www.youtube.com/watch?v=_9ob8FcnYY4 本篇文章使用的流程。 不過過程中有遇到問題,所以寫了這篇文章想要補充不足之處。 以下是簡化版的流程: 下載地形資料並轉換為引擎可匯入的heightmap png檔。 1. 到https://viewer.nationalmap.gov/basic/下載地形資料 2. 到https://github.com/MacroPolo/real-terrain下載python script 3. 解壓縮地形資料檔,放到real-terrain的input資料夾內 4. 如果電腦沒安裝python,安裝python 5. 在命令列輸入python real-terrain.py [檔案名稱].img (註1.) 6. real-terrain的output資料夾內就會有輸出好的png檔。 在UE4匯入地形檔: 1. 創一個新地圖,WorldSettings設定Enable World Composition為true 2. Levels->Create New,產生新的子地圖 3. Models->Landscape->Manage->New Landscape->ImportFromFile 4. Heightmap File選擇前一個步驟6輸出好的png檔 5. 地形匯入完成。 6. 在World Composition視窗調整地圖到想要的位置。 以上是基本流程,不包含太多的細節,一些介面是從哪邊叫出來的就請參考影片。 在我的實驗中,用上面的流程匯入一塊地形檔是不會有任何問題的。 但是當我匯入兩塊地形檔放進UE4後,發現兩塊地形接不上,有嚴重的高低差問題。 這是本系列的第一篇 目前一共有以下幾篇為系列的文章 1. Import RealWorld Landscape to UE4 https://yekdniwue.blogspot.com/2020/06/import-realworld-landscape-toue4.html 2. 了解Landscape的組成元件 https://yek

在UE4 Editor繪製除錯用的元件

圖片
簡介 在遊戲中,我們都知道可以使用Blueprint的DrawDebug系列的功能,用來繪製圓球,膠囊體等物件提供除錯。 但是如果想在編輯器的View視窗用DrawDebug是做不到的(註1),至少UE4引擎內部並不是這樣用。 註1.我有試過在ConstructorScript呼叫DrawDebugSphere,結果是會畫出來,但是永遠不會消失了。 不過引擎是有提供編輯器除錯用的顯示功能的,我們可以在幾個地方看到: 1. Visual Logger 2. EQS Testing Pawn 3. NavigationTestingActor 使用Visual Logger可以在編輯器看到AI角色的位置資訊被記錄下來,也可以自己透過API紀錄想要的資訊,如圖所示。 Draw primitives in visual logger EQS Testing Pawn則是可以隨著編輯過程的狀況不同,顯示/更新Query的結果,如圖所示。 Query result with EQS testing pawn in Editor. NavigationTestingActor是比較罕見的功能,可以在編輯器就預覽路徑搜尋的結果。 有個時候專案也會需要這方面的功能,如果沒有心理準備就直接看上面三個系統的實作,通常會被複雜的程式碼勸退。 這次我硬著頭皮研究並試著實作了一輪,簡單的做個筆記與分享。 最主要是去除複雜的程式碼,只列出最基本要實作的項目。有需要改進的部分再從上面提到的系統抽取出來即可。 本篇文章的內容以NavigationTestingActor為出發點作分析,雖然比較少見,但似乎是這幾個系統裡面相對簡單的部份。 架構組成 1. AActor 2. URenderComponent 3. FSceneProxy 要完成這個功能,首先要有三個class,一個就是顯示項目要依附在的Actor。 然後要為這個Actor新增自定義的RenderComponent,作為顯示用。 在RenderComponent內會創出自定義的SceneProxy,你要繪製的項目要實作在SceneProxy的函式內。 以下實際用TestActor, TestRenderComponent, TestSceneProxy分別做為案例。 TestActor要實作的項目 在TestActor的member加上