UE學(xué)習(xí)記錄:聲音/角色死亡/UI
聲音
首先攻擊彈道添加一個(gè)飛行時(shí)的音效,新建音效Sound Cue,選中要添加的音頻,編輯器里右鍵添加聲波播放器,可以在輸出中的衰減設(shè)置里重載衰減對(duì)其進(jìn)行設(shè)置。這里我們到Audio文件夾中創(chuàng)建一個(gè)音效衰減,再去Sound Cue中分配它。
再添加一個(gè)爆炸音效,可以同時(shí)選擇兩個(gè)音頻,在Sound Cue中分配時(shí)右鍵添加隨機(jī)播放。為了使每次爆炸的效果更加隨機(jī),再添加一個(gè)調(diào)制器節(jié)點(diǎn),該節(jié)點(diǎn)可隨機(jī)改變音高和音量。
角色死亡
在RGAttributeActorComponent類中添加IsAlive函數(shù)并用const標(biāo)記(只讀)
在角色藍(lán)圖左側(cè)變量中添加一個(gè)bool變量,命名bIsAlive,在AnimGraph中添加一個(gè)按布爾姿勢混合節(jié)點(diǎn),將bIsAlive接入Active Value,F(xiàn)alse接入指定播放動(dòng)畫,True為原有接入。在事件圖表中調(diào)用RGAttributeActorComponent類中添加的IsAlive函數(shù)為變量bIsAlive賦值。

禁用對(duì)角色的控制
在RGCharacter類中添加如下代碼,使角色死亡后玩家失去控制權(quán)
UI顯示受傷時(shí)血量
在UI文件夾下添加控件藍(lán)圖命名DamagePopup_Widget,在設(shè)計(jì)器中拖入一個(gè)文本框,將其位置設(shè)置到左上角,“Is Variable”便于后續(xù)訪問。
在圖表中進(jìn)行邏輯設(shè)計(jì),首先事件在每一幀進(jìn)行監(jiān)控,我們需要在攻擊Overlap某個(gè)對(duì)象且造成傷害時(shí)(對(duì)象有AttributeComp)顯示該文本,因此我們需要一個(gè)變量來記錄這個(gè)對(duì)象,在“圖表”中創(chuàng)建一個(gè)變量AttachTo,變量類型設(shè)置為Actor,勾選“可編輯實(shí)例”和“生成時(shí)公開”以便在其他藍(lán)圖傳遞該變量。我們需要用到“將場景投射到屏幕(Project World To Screen)”節(jié)點(diǎn)將給定的3D空間點(diǎn)(這里為Overlap的Actor)轉(zhuǎn)換為2D屏幕的坐標(biāo),由于在不同的分辨率下文本的顯示位置會(huì)不一樣,我們將通過“獲取視口縮放”節(jié)點(diǎn)來獲取DPI縮放值,來矯正UI顯示位置。

? ? ? 設(shè)置UI在顯示3s后消失:

到BP_RgTargetDummy藍(lán)圖中的AttributeComp組件中添加OnHealthChanged事件,創(chuàng)建該控件。在DamagePopup_Widget中添加指向Actor的AttachTo變量,就是為了在這里添加Self節(jié)點(diǎn),將BP_RgTargetDummy傳入進(jìn)去,這樣,在BP_RgTargetDummy觸發(fā)OnHealthChanged事件時(shí),就會(huì)顯示文本。
