最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

TomLooman_ActionRoguelike_第八章游戲材質(zhì)

2023-08-10 08:17 作者:別叫我小紅  | 我要投稿

該專欄用于保存對TomLooman的ActionRoguelike項目的學(xué)習(xí)筆記,學(xué)習(xí)過程中的思考與記錄不一定準(zhǔn)確。


教程參考:https://github.com/tomlooman/ActionRoguelike

基于UE5.0的項目實現(xiàn):https://github.com/CarolBaggins2023/TomLooman_ActionRoguelike_Tutorial

2023_08_05

游戲材質(zhì):材質(zhì)基礎(chǔ)知識,閃光材料和驅(qū)動材料參數(shù),簡單溶解材料,可重復(fù)使用的材料函數(shù),用戶界面的材料

?

創(chuàng)建材料

每次修改完材料后,要進(jìn)行Apply,否則修改后的材料不會被應(yīng)用,類似于藍(lán)圖中修改完后要Compile,

在材料的界面中,顏色用三維向量表示(Constant3Vector),金屬性、透明度等用常數(shù)表示(constant)。

BaseColor參數(shù)也可以傳入紋理,不只是純顏色,

如果我們想讓某一項的變化實時地體現(xiàn)(不用頻繁Apply),或者想從外部修改它,可以將節(jié)點轉(zhuǎn)換為參數(shù)(變量),然后創(chuàng)建一個該材料的實例,就可以實時地修改了。注意,世界中的物體要將材料的實例作為Material才能實時地看出材料參數(shù)的變化。而且不能材料的實例添加新的功能,因為材料實例只是用來調(diào)整參數(shù)的。

?

?

將材料中的某個節(jié)點轉(zhuǎn)換為參數(shù)后,如果我們在某個藍(lán)圖類中用到了該材料,那么就可以在藍(lán)圖中訪問該參數(shù)并修改。

?

我們想要做一種材料,使用這種材料的物體在受到子彈傷害時會短暫地閃爍一下。

以下是這種材料的材料圖界面,這里的邏輯就是用受擊時間和當(dāng)前時間的差作為發(fā)光度。這里我們把一個constant節(jié)點轉(zhuǎn)換為了TimeToHit變量,當(dāng)然材料本身是沒辦法知道什么時候發(fā)生Hit,然后給TimeToHit變量賦值的,所以我們要在C++中完成。

?

用C++給材料中的參數(shù)賦值的邏輯是,創(chuàng)建一個帶MeshComponent成員變量的C++類,然后將這個函數(shù)作為類實例的Material,這樣就能在C++代碼中通過修改成員變量,來修改材料的參數(shù)。

同時,因為要在受擊時發(fā)光,所以在這個C++類中,我們還要帶有屬性組件類的成員變量,并且將屬性組件變量中的委托與該類的成員函數(shù)綁定,在成員函數(shù)中實現(xiàn)對材料參數(shù)的修改。

我們將屬性組件中的委托實例與成員函數(shù)綁定,并在成員函數(shù)中用SetScalarParameterValueOnMaterials,通過變量名稱,修改材料的參數(shù)。這里的“TimeToHit”就是我們在材料中將節(jié)點轉(zhuǎn)換為參數(shù)后的名字。

?

之后,我們就可以創(chuàng)建UTargetDummy類的藍(lán)圖子類,通過屬性組件類的成員變量實現(xiàn)對是否受擊的監(jiān)聽。

?

為了在多處復(fù)用這個受擊發(fā)光的效果,我們構(gòu)建了一個材料函數(shù),將函數(shù)的輸出值作為材料的發(fā)光度。

材料函數(shù)通過以下方法創(chuàng)建,

函數(shù)邏輯如下,絕大部分與原本的實現(xiàn)相同,不同的是多個個FunctionInput節(jié)點,這個節(jié)點將我們函數(shù)輸入暴露在外,所以在使用函數(shù)時可以傳入一些自定義的值,我們也可以設(shè)置默認(rèn)值。設(shè)置默認(rèn)之后,調(diào)用該函數(shù)時輸入的節(jié)點從白色變成灰色。

我們可以在Material中制作一個溶解的紋理(可見的表面逐漸消失,類似與游戲中角色死亡時的效果)。這里用到了TextureSample,可以傳入紋理效果。

這里的基本邏輯是,材料中有個clip參數(shù)表示顯示Texture的閾值,如果Texture在某點的RGB值小于閾值,則不顯示,大于則顯示。所以我們可以通過外加值與Texture求和,改變Texture上的值大于閾值的占比,從而實現(xiàn)一些位置顯示Texture,一些地方不顯示的效果。

這里我們包含了用時間作為外加值和將外加值轉(zhuǎn)換為一個參數(shù)的做法。

?

?

之前,我們的血條是用ProgressBar做的,通過SetPercent改變ProgressBar?,F(xiàn)在我們可以制作一個血條的材料來實現(xiàn)這個效果。大致思路是,我們在血條材料中設(shè)置一個參數(shù),這個參數(shù)控制血條變化,然后我們用一個使用該材料的Image替換ProgressBar,并在UI藍(lán)圖中改變參數(shù)。

以下是血條材料圖。因為我們是用在UI上的,所以不需要原來這么多參數(shù),將MaterialDomain換為UserInterface。我們用PlayerAlpha的常數(shù)變量控制血條變化,控制的方法是用if函數(shù),PlayerAlpha大于線性梯度(下面的黑白圖)的部分是白色,小于的部分是紅色。

?

將上面的材料用于UI中的Image,

我們可以在UI藍(lán)圖中實現(xiàn)如下邏輯。當(dāng)受擊事件發(fā)生,角色的屬性組件中的OnHealthChanged委托實例發(fā)出廣播,執(zhí)行UI藍(lán)圖中的OnHealthChanged_Event_0事件,然后獲得Image的Material,并修改Material中的ProgressAlpha變量,也就是上面控制材料表現(xiàn)的變量。


TomLooman_ActionRoguelike_第八章游戲材質(zhì)的評論 (共 條)

分享到微博請遵守國家法律
乡宁县| 文山县| 阜城县| 益阳市| 长春市| 徐水县| 乌什县| 扬中市| 新建县| 涟源市| 韶山市| 铅山县| 大姚县| 义乌市| 华亭县| 读书| 色达县| 新龙县| 仙居县| 峨眉山市| 麻江县| 安溪县| 赫章县| 翼城县| 曲靖市| 田阳县| 韩城市| 旬阳县| 龙南县| 平武县| 盐亭县| 苏尼特左旗| 顺平县| 沙坪坝区| 临猗县| 河曲县| 皋兰县| 托里县| 海伦市| 依兰县| 长春市|