[UE5][BP] 在UI上顯示特定模型
本文簡單說明使用BP在UI上顯示特定模型的製作方法。以下為最終結果圖。
此次示範使用的是UE5 Preview版。然而在UE4也能做到一樣的結果,請放心使用。本文的最終成果可以在GitHub上取得,有需要的歡迎使用。
要在UI上顯示模型的步驟,簡單說明如下:
1.使用SceneCapture2D將場景上的模型擷取至RenderTarget
2.將RenderTarget結果存到Texture
3.將Texture顯示到UI上
要完成本文的功能不需要寫任何的程式,用藍圖即可全部完成。以下從創建專案開始完整說明。
製作流程
首先開啟一個全新的Blank專案,新增一個BlueprintActor,命名為BP_UICaptureActor
在BP_UICaptureActor中新增StaticMesh和SceneCaptureComponent2D元件。
稍微調整一下位置,以及對StaticMesh任意指定一個Mesh。
在SceneCaptureComponent2D中找到TextureTarget屬性,選擇新增RenderTarget,命名為RT_UICapture。
創建一個Texture命名為T_UICapture。
點開T_UICapture,做以下設定:
將Blend Mode設定為Translucent讓我們可以對擷取的圖片做去背處理。
接著在Material Graph內點右鍵新增TextureSample
如下圖連接之後,設定TextureSample的Texture為RT_UICapture。
1-x是反轉Alpha的意思。
以上擷取並顯示的流程大致完成,我們先來試試看效果。先隨便建立一個簡單的UMG並放入Image顯示T_UICapture。
接著進入Level Blureprint在畫面上顯示UI。
把BP_UICaptureActor拉到場景後點下Play。
以下是顯示的結果。
ㄜ,是顯示出來了沒錯,可是我只想要拍到方塊本身,後面需要透明的。因此接下來需要讓它只擷取特定模型。
回到BP_UICaptureActor,將SceneCaptureComponent2D的PrimitiveRenderMode設定為UseShowOnlyList。這個設定會讓它只擷取特定Actor。
進入Event Graph,在BeginPlay中將自己設定為顯示對象。
再度回到遊戲按下Play。
這次成功去背了!正是我們要的!
只是顯示個方塊看起來有點乾,於是我們寫個簡單的選單,接著根據選取選項把模型做切換,然後再加個酷酷的旋轉,以下就是最後完成結果。
當然,要把它整合進我們遊戲的物品系統等等又是另外一個課題了,這部分請根據各自專案需求自行加油。另外這次為了解說方便,我們是直接把擷取對象放在場景,實際製作還是用動態生成的方式比較正確。
一些問題
看起來我們在UI上顯示模型的目的是達成了,但是實際的遊戲的專案中還會碰到不少問題,以下用列出可能會碰到的幾個問題,以及參考的解決方法。
Q:UI上的模型會被環境光影響!
A:由於我們擷取的模型是實際存在於場景的,因此是場景的一部分,當然也會受到打光等等的影響。如果只是打光的話,可以藉由調整Lighting Channel的方式來讓模型不會受到光照影響。如果是Post Process之類的影響,就要根據實裝方式另外想辦法了。
Q:我的遊戲開啟UI時遊戲是暫停的。因此模型的貼圖本來會動,現在不會動了!
A:遊戲暫停時很多Tick都會失效。包含貼圖的動畫、模型的物理等等。如果是在Component的Tick中處理的話,使用TickEvenWhenPaused此選項可以解決問題。至於貼圖的部分,在Time Input會有一個Ignor Pause的選項,勾選後也能解決問題。其他部分就要根據實裝方式了。