UE5.1.1實現(xiàn)鼠標(biāo)點擊地面產(chǎn)生顏色描邊和UI
以下面這個火星地形場景為例,要實現(xiàn)運行后用戶通過鼠標(biāo)點擊地形的任何一個地方,都可以將地形進行顏色描邊并在點擊的地方生成一個簡單的介紹火星的UI,當(dāng)鼠標(biāo)再點擊地形的另一處地方時,又可以在點擊出生成同樣的UI,而上次點擊出現(xiàn)的那個UI則會伴隨著下一次的點擊消失,同時還可以通過按鍵來控制UI的顯示與隱藏。

一、創(chuàng)建控件藍圖
1、可以在內(nèi)容瀏覽器下新建文件夾,用戶存放我們創(chuàng)建的資產(chǎn),這里創(chuàng)建一個文件夾,命名為BluePrints。進入到BluePrints文件夾中,右鍵單擊內(nèi)容瀏覽器空白處,選擇用戶界面--控件藍圖,在彈出的窗口中選擇用戶控件來創(chuàng)建一個新的控件藍圖;


2、將新創(chuàng)建的控件藍圖命名為WB_Mars。

3、雙擊WB_Mars,進入控件設(shè)計器,搭建一個簡單的UI,如下圖所示,搭完后編譯保存即可。

二、將控件放入藍圖類中
1、右鍵單擊空白處,選擇藍圖類;

2、在彈出的窗口中選擇Actor,創(chuàng)建一個新的藍圖類,如下圖;

3、隨便命個名,為BP_WB_Mars;

4、雙擊進入BP_WB_mars,在組件樹中添加控件組件(直接搜索widget,然后選擇點擊“控件組件”即可);

5、為控件組件指定控件類,選擇我們之前創(chuàng)建好的WB_Mars即可。

三、攝像機漫游角色設(shè)置
1、可以自己先構(gòu)建一個攝像機漫游角色,具體怎么構(gòu)建上一期專欄有詳細步驟,構(gòu)建完成后,雙擊進入攝像機漫游角色的藍圖,進入到事件圖表,編寫如下藍圖,用戶顯示鼠標(biāo)并使用鼠標(biāo)的點擊功能:(我這里的攝像機漫游角色是Pawn_Zhouye)

如果節(jié)點不夠用可以添加一個Sequence序列

2、在Pawn_Zhouye中,新建一個函數(shù),用于實現(xiàn)在鼠標(biāo)點擊處生成UI的功能;

3、在函數(shù)里寫內(nèi)容,首先需要進行射線檢測,設(shè)置好檢測的初始點和結(jié)束點;這里首先將玩家的鼠標(biāo)位置轉(zhuǎn)換到世界空間,也就是將鼠標(biāo)的位置與方向都轉(zhuǎn)換成場景中的,鼠標(biāo)在場景中的位置為射線檢測的初始點的位置,而結(jié)束點的位置則是初始點的位置在加上射線的方向向量,這個方向向量可以盡量乘的大一些,以免射線太短從而檢測不到與射線碰撞的物體;

4、然后緊接著添加branch(分支)節(jié)點,表示判斷,如果檢測到物體(真)就執(zhí)行后面的步驟,沒有(False)就不執(zhí)行任何操作,同時將命中結(jié)果(Out Hit)進行中斷處理(因為它是一個結(jié)構(gòu)體),進而可以獲得我們想要的參數(shù),也就是Location,這個Location表示從鼠標(biāo)的位置發(fā)射出一條直線,這個直線與場景中的物體相交的交點位置;

5、如果檢測到物體(真)則可以在Location處生成Actor,其中在Class出我們選擇之前創(chuàng)建好的BP_WB_Mars,也就是那個里面包含了WB_Mars控件的藍圖類,也可以將其提升為一個變量,然后為這個變量指定類型;如果覺得顯示的控件位置不太合適,可以自行處理一下,如下圖所示,加一個向量,自己調(diào)參數(shù):


6、然后將“生成Actor”節(jié)點的返回值作一個類型轉(zhuǎn)換,轉(zhuǎn)換成BP_WB_Mars,并將其提升為變量,作為函數(shù)的返回值,如下圖所示:

四、關(guān)卡設(shè)置
1、進入到關(guān)卡中,以這個火星場景為例,將攝像機漫游角色藍圖拖入場景中,并設(shè)置“自動控制玩家”為“玩家0”;

2、我們希望點擊火星地形時可以蹦出UI,首先,在場景中選擇上所有的火星地形塊,這里有16塊;

3、打開關(guān)卡藍圖,鼠標(biāo)右鍵單擊,添加On Clicked事件;

添加后會出現(xiàn)這些節(jié)點,如下圖所示:

4、回到場景中,選擇攝像機漫游角色(Pawn_Zhouye),再打開關(guān)卡藍圖,右鍵選擇創(chuàng)建引用;


5、調(diào)用之前在攝像機漫游角色中寫好的函數(shù),每個On Clicked都要練一下flipflop節(jié)點,如下:

6、運行后會發(fā)現(xiàn)點擊可以在位置處生成UI,但還會保留上一次點擊生成的UI,如下圖:

7、先進入到BP_WB_Mars藍圖類中,添加自定義事件,銷毀Actor,如下圖所示:

8、然后進入到關(guān)卡藍圖中,調(diào)用該自定義事件(銷毀Actor),然后編譯保存運行;

9、此時我們發(fā)現(xiàn)上一次點擊時生成的UI的確消失了,但運行結(jié)束后會提示藍圖運行時錯誤,這是一個小Bug,讓我們來修復(fù)它;


10、回到關(guān)卡藍圖中,我們將函數(shù)“顯示火星地表UI”的返回值提升為一個變量(這里變量的名稱為New Param,懶得改了),然后藍圖變?yōu)槿缦聢D所示的樣子:

其中GET的那個有效無效節(jié)點的調(diào)出方法為:先從左側(cè)把New Param拖出來,選擇獲取New Param,然后右擊該變量,選擇“轉(zhuǎn)換為有效的Get”即可

完事之后,便不會提示“藍圖運行時錯誤”了。
五、鼠標(biāo)點擊地形塊時產(chǎn)生描邊效果
1、首先準(zhǔn)備好描邊材質(zhì),資源在評論區(qū)

2、打開項目設(shè)置,將“自定義深度-模板通道”設(shè)置為啟用模板;

3、選擇地形塊,勾選渲染自定義深度通道,并設(shè)置模板值,這里就設(shè)置為1,這個材質(zhì)一共有6個模板值,每個地形塊都是如此處理;設(shè)置完之后,地形塊會出現(xiàn)miao

設(shè)置完之后,地形塊會出現(xiàn)描邊效果,如下圖所示:

4、但我們想要的效果是鼠標(biāo)點擊時會產(chǎn)生描邊,這是就需要對材質(zhì)進行處理,打開材質(zhì)藍圖,材質(zhì)的名稱為M_SurvivorVision_DemoMaterial,進入Depth Group 1,如下圖所示:

5、首先新建一個材質(zhì)參數(shù)集,命名為Constant(隨便取的),


6、雙擊進入Constant材質(zhì)參數(shù)集,添加標(biāo)量參數(shù),默認值為0,命名就用默認的;

7、將該材質(zhì)參數(shù)集直接拖入材質(zhì)藍圖中,并選擇參數(shù)名,我們就選擇Scalar,就是之前創(chuàng)建的標(biāo)量參數(shù),命名用的默認的“Scalar”;


8、添加Lerp節(jié)點,這個Lerp節(jié)點表示當(dāng)參數(shù)Alpha從0變到1是,其返回值會從A變到B;同時我們把Outline Color [Group 1]的輸入節(jié)點的線都移動到Lerp的輸出節(jié)點,操作方式是暗處Ctrl鍵將原來的點往目標(biāo)點上拖即可;


9、然后A點我們連一個RGBA值均為0,0,0,0的顏色值即可,B點就連這個Outline Color?[Group 1]的輸入節(jié)點,Alpha連上Scalar,如下圖所示:

10、回到關(guān)卡藍圖,鼠標(biāo)點擊地形塊時設(shè)置標(biāo)量參數(shù)值,將Constant參數(shù)集中的Scalar設(shè)置為1,如下圖所示:

11、再進行測試,鼠標(biāo)點擊地形任意一點時會產(chǎn)生地形描邊并在位置處顯示UI:

12、進入到BP_WB_Mars藍圖類中,編寫按鍵控制UI顯示與隱藏以及顯示與取消地形描邊的功能,如下圖所示;

13、再進行測試,就可以實現(xiàn)鼠標(biāo)點擊出現(xiàn)地形描邊與UI顯示,然后按下G鍵可以關(guān)閉/顯示UI以及顯示/取消地形描邊。