動畫融合:在特殊情況下需要播放倆個動畫的內(nèi)容捆探,且不增加動畫數(shù)量,可以應(yīng)用動畫融合處理站粟,比如移動攻擊等
1.首先創(chuàng)建一個Avatar Mask
2.在Inspector界面選擇骨骼源,并選擇該骨骼遮罩所控制的綁點
3.在Animator內(nèi)增加新的層級設(shè)置權(quán)值為1,并將骨骼遮罩賦值進(jìn)去
權(quán)值大的層級的骨骼遮罩綁點動作將覆蓋權(quán)值低的綁點動作
層級的結(jié)構(gòu)是一樣的黍图,都會包含Any State和Entry 并且游戲運行時每個層級都會同時從Entry運行
4.設(shè)置好對應(yīng)的動畫后可以進(jìn)入游戲測試了!奴烙!
IK動畫:反向動力學(xué),根據(jù)骨骼的終結(jié)點來推算其他父節(jié)點位置的一種方法助被,比如通過手的位置推算手腕胳膊肘的位置。
unity中可以設(shè)置IK的位置就是5個,分別是:頭切诀、左右手揩环、左右腳
1.在設(shè)置IK的動畫層勾選IK Pass 并保證動畫Rig的類型為humanoid
2.在代碼中添加OnAnimatorIK回調(diào)
設(shè)置了動畫類型和勾選IK pass后的層根據(jù)回調(diào)方法進(jìn)行IK行為的處理
AvatarIKGoal類枚舉
{
LeftFoot = 0, //左腳
RightFoot = 1, //右腳
LeftHand = 2, //左手
RightHand = 3 //右手
}
//設(shè)置骨骼的權(quán)重,1表示完整的骨骼幅虑,如果是0.5哪么骨骼權(quán)重就是一半呢丰滑,可移動或旋轉(zhuǎn)的就是一半
animator.SetIKPositionWeight(AvatarIKGoal.LeftHand, 1f);
animator.SetIKRotationWeight(AvatarIKGoal.LeftHand, 1f);
//設(shè)置右手根據(jù)目標(biāo)點而旋轉(zhuǎn)移動父骨骼節(jié)點 rightHandObj為父骨骼節(jié)點
animator.SetIKPosition(AvatarIKGoal.RightHand, rightHandObj.position);
animator.SetIKRotation(AvatarIKGoal.RightHand, rightHandObj.rotation);
//頭部的IK行為可以通過以下方法進(jìn)行,
animator. SetLookAtPosition(目標(biāo)坐標(biāo))
animator. SetLookAtWeight(參數(shù)解讀參考下圖)