Unity Metaverse(二)、Mixamo & Animator 混合树与动画融合

🎈 Mixamo

🔸 简介

MixamoAdobe公司推出的在线免费角色动画库,地址:Mixamo,我们可以在上面搜索开发所需的角色动画并下载使用。

在这里插入图片描述

🔸 使用说明

例如我们想为Avatar角色添加一个Idle动画,在Search搜索栏中进行检索:

在这里插入图片描述
可以通过UPLOAD CHARACTER上传我们自己的Avatar模型来预览动画效果:

在这里插入图片描述
点击DOWNLOAD便可以下载对应的角色动画,下载完成后导入到Unity中,在Import Settings导入设置Rig窗口中,将Animation Type即动画类型改为Humanoid人形动画:

在这里插入图片描述

🎈 Unity Animator

🔸 Blend Tree 混合树

Blend TreeAnimator Controller动画状态机中的一种特殊状态类型,用于多个动画之间的平滑混合,每个动画对最终效果的影响由混合参数控制,经常用于处理移动动画之间的混合。

例如我们在Mixamo动画库下载了IdleWalkSprint,即静止、行走、奔跑三个动画,接下来想要使用Blend Tree通过一个参数Speed即移动速度来控制这三个动画之间的混合。

首先将这三个动画的Loop Time都设置为true,表示它们都是循环播放的:

在这里插入图片描述
Animator中通过右键 > Create State > From New Blend Tree来创建一个混合树,命名为Move,并创建参数Speed:

在这里插入图片描述
双击进入混合树,添加三静止、行走、奔跑三个动画,由于我们使用一个参数Speed来控制混合,所以Blend Type使用默认的1D方式,Threshold阈值分别设置为0、10、25:

在这里插入图片描述
通过用户输入的值来设置Speed参数:

using UnityEngine;

namespace SK.Framework.Avatar
{
    /// <summary>
    /// Avatar动画控制
    /// </summary>
    public class AvatarAnimatorController : AvatarMovementController
    {
        //动画参数
        private static class AnimatorParameters
        {
            public readonly static int Speed = Animator.StringToHash("Speed");
        }

        private Animator animator;

        protected override void Start()
        {
            base.Start();
            animator = GetComponent<Animator>();
        }

        protected override void Update()
        {
            base.Update();
            animator.SetFloat(AnimatorParameters.Speed, Mathf.Clamp01(input.magnitude) * speed);
        }
    }
}

在这里插入图片描述

🔸 动画融合

动画融合是指两个动画之间的融合播放,例如第三人称射击游戏中玩家边走边射击的动作,可以理解为移动+射击动画的融合播放:

在这里插入图片描述
这里我们以行走+打招呼的动画融合为例,我们在Mixamo动画库中下载一个Wave动画,在Animator中创建一个新的Layer层级,将Weight权重设为1,Blending设为Override方式,并创建一个Avatar Mask

在这里插入图片描述
Avatar Mask禁用掉除了右手和右臂之外的其它部位,因为我们打招呼的动作只需要右手和右臂起作用:

在这里插入图片描述
添加一个Trigger类型的参数,用来触发Wave动作:

在这里插入图片描述
假设用户按下快捷键1时触发Wave动作:

using UnityEngine;

namespace SK.Framework.Avatar
{
    /// <summary>
    /// Avatar动画控制
    /// </summary>
    public class AvatarAnimatorController : AvatarMovementController
    {
        //动画参数
        private static class AnimatorParameters
        {
            public readonly static int Speed = Animator.StringToHash("Speed");
            public readonly static int Wave = Animator.StringToHash("Wave");
        }

        private Animator animator;

        protected override void Start()
        {
            base.Start();
            animator = GetComponent<Animator>();
        }

        protected override void Update()
        {
            base.Update();
            animator.SetFloat(AnimatorParameters.Speed, Mathf.Clamp01(input.magnitude) * speed);

            if (Input.GetKeyDown(KeyCode.Alpha1))
            {
                animator.SetTrigger(AnimatorParameters.Wave);
            }
        }
    }
}

在这里插入图片描述

  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CoderZ1010

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值