12_P107~P121Attacking
107?Animation Montages動畫剪輯
Creating an Animation Montage for attacking創(chuàng)建一個動畫蒙太奇攻擊
創(chuàng)建動畫蒙太奇
將兩個攻擊動作拖入下面進(jìn)度條中,然后設(shè)置attack1和attack2
做完之后,右下角片段這里一定要點(diǎn)一下清除,否則順序會亂

然后回到角色藍(lán)圖中
輸入attack,就是項(xiàng)目配置中,鼠標(biāo)左鍵綁定的事件名稱
然后如下


108 Playing Montages from C++從c++中播放蒙太奇
Calling Montage Play From C++從c++調(diào)用蒙太奇播放
創(chuàng)建蒙太奇對象 UAnimMontage
打開character的cpp文件,新建函數(shù)用于綁定鼠標(biāo)左鍵的功能
109?Attacking State攻擊狀態(tài)
Handling the Character's State for Attacking處理角色的攻擊狀態(tài)
通過新建枚舉AttackState,判定角色是否處在攻擊狀態(tài)
110?Resetting the action state重置操作狀態(tài)
using anim notifies to reset the action state使用anim通知重置動作狀態(tài)
在AM_AttackMontage中,在兩個攻擊動畫最后,添加兩個通知AttackEnd

回到C++中,將AttackState設(shè)置給藍(lán)圖
在ABP_Echo中,輸入以下節(jié)點(diǎn),這樣在攻擊動畫播放時,如果再次按下鼠標(biāo)左鍵,則不會重頭播放動畫

C++可以實(shí)現(xiàn)修改攻擊狀態(tài)的內(nèi)容
在EchoCharacter的cpp中,聲明新的函數(shù)AttackEnd

然后在ABP_Echo中調(diào)用這個函數(shù)

如果我們需要判斷引入的對象是否有效,可以這么操作


我們在攻擊的判斷上,加上對“是否有裝備”進(jìn)行判斷,這樣角色在沒有裝備的時候,就不會憑空的攻擊

111?item State 道具狀態(tài)
因?yàn)楫?dāng)前武器繼承了道具類中,上下移動的屬性
所以需要給道具添加一個狀態(tài),判斷當(dāng)前是否被裝備,如果被裝備了,則停止移動
首先在Item.h聲明一個道具狀態(tài)的枚舉,并定一個道具狀態(tài)的變量


在道具默認(rèn)移動的語句中,加入狀態(tài)判斷

在weapon.cpp中的equip函數(shù)中,加入狀態(tài)判斷

如果我們需要在攻擊時停下移動,則加入以下

112?Sound Notifieds and Meta Sounds聲音通知和Meta Sounds
Adding Sounds to animations為動畫添加聲音
方法1 直接添加聲音至動畫,或者添加SoundCue ?UE4的方法
在動畫蒙太奇中添加武器揮動的聲音

或者我們新建一個SoundCub的組件來包含聲音

這樣我們可以在SoundCue里面去修改聲音的參數(shù),而不是修改聲音文件本身

方法2 使用UE5的Meta Sounds
docs.unrealengine.com/5.1/en-US/metasounds-the-next-generation-sound-sources-in-unreal-engine/
新建MeteSounds Source,這個不要搞錯了

打開編輯器,創(chuàng)建名為whoosh的input節(jié)點(diǎn),節(jié)點(diǎn)屬性里面,type選擇WaveAsset,default中選擇需要的聲音資源
新建 wave play節(jié)點(diǎn),鏈接節(jié)點(diǎn)

加入隨機(jī)音量

113?Meta sounds for footsteps
這一節(jié)可以參考這個視頻
https://www.bilibili.com/video/BV1wG411P7ew
114?Fixing foot placement固定腳位
setting initial Ik bone Locations設(shè)置初始Ik骨位置
解決之前P82腳步骨骼的問題
解決了之前角色抬腳過高的問題
115?Putting the Sword Away收起劍
Arming and Disarming Animations武裝和解除動畫
116?解決了沒有裝備武器的動畫
我這里是自己添加了一個變量 bisEquipped 來檢查
如上圖
修改了一下,換成判斷他添加的一個類型來檢查


117?Attaching the Sword to the Back將劍固定在背部
Adding a Socket ot the skeleton在框架中添加套接字
新增了兩個對藍(lán)圖開放的方法
需要在AM_Equip中添加兩個通知

轉(zhuǎn)到藍(lán)圖,鏈接上C++的函數(shù),實(shí)現(xiàn)具體功能

添加了一個狀態(tài),這樣在切換裝備時,不會因?yàn)槠渌麆幼鞔驍?br>

修改了移動中的判斷

在切換武器時,添加了新的狀態(tài)

在藍(lán)圖中,給AM_Equip添加了EquipEnd的通知
然后在動畫藍(lán)圖中,添加了新的方法

118?Equip and UnEquipi Sounds裝備和明確聲音
Playing sounds when Equipping and unequipping the weapon裝備和卸下武器時播放聲音
在對應(yīng)的蒙太奇動畫中AM_Equip添加了音效

繼續(xù)嘗試給拾取道具添加聲音
創(chuàng)建一個新的MeteSound對象

在C++中,我們需要給武器藍(lán)圖創(chuàng)建一個聲音對象,這樣可以在藍(lán)圖中給武器設(shè)置不同的聲音
這里需要用到USoundBase 和 UGameplayStatic兩個頭文件
#include "Sound/SoundBase.h"
#include "Kismet/GameplayStatics.h"
在weapon.h中,我們新建一個USoundBase對象,并將其暴露給藍(lán)圖

然后在重疊碰撞中,拾取裝備的方法中,添加聲音播放的功能

重構(gòu)之后,我們在UE中找到這個武器,打開藍(lán)圖設(shè)置,在右邊就可以看到聲音的選項(xiàng),關(guān)聯(lián)上我們之前設(shè)置的聲音就可以了

然后他后面講了 他如何處理拾取武器之后,武器依然在于角色重疊檢測的問題
首先到Item.h文件中,確保USphereComponent* Sphere 不在private中,

然后的weapon.cpp中的Equip 裝備拾取的方法中,關(guān)閉了Sphere的碰撞
加上頭文件
#include "Components/SphereComponent.h"
判斷在裝備拾取后,關(guān)閉Sphere的碰撞

119?如何在UE中,修復(fù)一些動作的瑕疵
比較實(shí)用的內(nèi)容,詳見視頻