[UE5][BP] 使用Geometry Script Plugin產生可動態調整的樓梯
UE5 Preview版新增了Geometry Script這個Plugin。使用這個,可以讓我們從藍圖就能輕鬆的做出程序形成多邊形(Procedural geometry),也就是不用借助其他軟體,能夠根據自己設計的規則,動態生成想要的模型。然而目前這功能是實驗功能,還沒正式推出,以後還有各種修正的可能。
本文配合Geometry Script Plugin,只使用了BP實作了簡單的動態樓梯,並且轉換成Static Mesh以用於量產。下圖為這次製作的動態樓梯結果。本次完成的專案有上傳到GitHub,需要的歡迎取用。
安裝Geometry Script Plugin
進入Plugin選單開啟Geometry Script後重啟編輯器。
新增動態模型Actor
使用ThirdPersonMap,把場景上各種雜物拿掉後,新增一個GeneratedDynamicMeshActor, 這是一個用於程序形成的特殊Class。
接著開啟BP_GeneratedMeshActor,新增Event On Rebuild Generated Mesh事件。生成模型的處理在這邊進行。讓我們先試試看新增一個簡單的方塊。這邊們使用Append Box這個函式,如下圖填入大小。
之後回到場景,把它拉到場景後就會看到我們創建的方塊。
然而如此只會顯示固定大小的方塊,為了讓我們方便在編輯器中調整大小,需要建立個簡單的工具。
建立調整用的Vector工具
首先新增一個Vector變數,命名為Bound,並且連接到Append Box中的Dimension。
接著把變數的Instance Editable設為true之後就能在各實體作大小的修改了,另外這邊我們另外使用一個Show3DWidget的功能,把這兩項設成true。
編譯後回到場景,選擇物件後,會看到我們的方塊旁邊多個一個寫著Bound的方塊,這就是我們使用Show3DWidget的功能,這讓我們在編輯器內只要拖拉就能調整變數, 非常方便!
製作簡單的程序生成樓梯
到此我們作出一個可以任意調整的方塊,接著用我們學到的功能,加上簡單的計算,就能生成一個動態樓梯了!
以上是我們樓梯簡單的側面設計圖,紅色是整個樓梯的大小,h為固定高度,從最底往上逐漸生平均分配寬度方塊,最後組合成樓梯。以下是這次樓梯的生成結果以及藍圖。圖看起來有點複雜,但是其實就是把每一層樓梯的大小計算出來,以及把方塊疊起來而已。
儲存後回到場景,就會看到我們的樓梯了!當然,跟前面的方塊一樣,是可以直接調整的。這邊只是提供一個樓梯的例子,利用同樣的流程,做出各式各樣的形狀也不是問題!
轉換成Static Mesh
到目前為止,我們建立出了一個動態樓梯。然而要將它投入遊戲且量產,必須轉換成Static Mesh。因此在這邊說明如何將動態樓梯轉為Static Mesh的方法。
首先我們決定好要轉換的實體後,如下圖,切換到Modeling Mode→選擇Convert→生成在Current Folder→按下Accept。
之後就會看到我們生成的Static Mesh了。
拉到場景上後按下Play,可以看到,碰撞也成功自動生成了!(改了一下材質以示區隔)
除了使用上述編輯器的功能外,也能使用CopyMeshToStaticMesh這個函式來動態生成StaticMesh並儲存成Asset,這能夠加速我們量產的速度。首先回到我們BP_GeneratedMeshActor,新增BakeTargetMesh變數(類型Static Mesh)和BakeToStaticMesh函式。將兩者都設為Public,函式設為設為CallInEditor讓我們可以在編輯器中使用。
BakeToStaticMesh的內部我們取得Dynamic Mesh Component並使用CopyMeshToStaticMesh函式儲存成我們指定的Static Mesh。實裝藍圖如下圖。
接著我們回到場景,選擇我們的場景上的動態模型,會多出以下兩個東西。接著我們把BakeTargetMesh設為指定的Static Mesh。
按下Bake to Static Mesh按鈕後,就會看到我們的動態模型直接被轉換成Static Mesh了。如此我們就可以快速大量量產各種不同大小的樓梯了!