Unity动画☀️10. 扛起木头动画的播放和AvatarMask的作用

2024-08-14 16:13:57 浏览数 (2)

1、设置扛起木头的动画Animation Clips

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#补充:

代码语言:javascript复制
private int isHoldLogID = Animator.StringToHash("IsHoldLog");
代码语言:javascript复制
private void OnTriggerEnter(Collider other)
    {
        if (other.tag == "Log")
        {
            Destroy(other.gameObject);
            unityLog.SetActive(true);
            anim.SetBool(isHoldLogID, true);
        }
    }

动画展示:

大家还有什么问题,欢迎在下方留言!

0 人点赞