2、给Player新建Hold Log动画层,添加进抗木头Animation Clips,并将动画层权重Weight设置为1
两层不同的动画层都为动画控制器Animator Controller服务,权重为1意味着它对动画控制器产生100%影响,Base Layer权重 也为1。
在两个动画层权重都为1(第一个的权重值不支持修改),第二个Hold Log—Blending为Additive时,两个动画层都对动画产生完全影响,即各自动画层的效果完全展现,且两个动画层动画效果能同时运行。例:若动画层1、2都控制同一部位,权重值可影响动画实际效果受谁影响大;若动画层1、2分别控制不同部位,权重都为1可完美运行
第二个Hold Log—Blending为Override(覆写)时,若动画层2权重为1,则完全运行动画层2效果(层1被覆盖),若不为1,则 动画为层1的x%和层2(1-x)%的结合
此时我们想运行层2的手臂托举动画,但不想层2控制的其他部位的动画覆写影响到层1(层1用来运动跑步等,权重为1,覆写时 运行效果是完全运行层2动画,层1的跑步动画不再有作用),解决思路是:Avatar Mask,动画遮罩
Avatar Mask
作用:遮蔽部分骨骼,使这部分骨骼不对其他动画层造成影响
3、在AnimatorControllers文件夹下新建Masks文件夹,新建Avatar Mask,设置Humanoid,红色表示遮罩部分,不产生影响,并赋值给动画层的Mask选项框
4、此时动画运行时直接运行抗木头动作,我们需判断是否捡起木头,再执行HoldLog动画
HoldLog动画层新建空状态,并设置为默认状态,添加空状态到HoldLog动画转换条件,添加Bool参数IsHoldLog,通过它来判断是否执行HoldLog动画
PlayerC#补充:
private int isHoldLogID = Animator.StringToHash("IsHoldLog");
private void OnTriggerEnter(Collider other)
{
if (other.tag == "Log")
{
Destroy(other.gameObject);
unityLog.SetActive(true);
anim.SetBool(isHoldLogID, true);
}
}
动画展示:
大家还有什么问题,欢迎在下方留言!