当前位置:网站首页>Unity Metaverse(二)、Mixamo & Animator 混合树与动画融合
Unity Metaverse(二)、Mixamo & Animator 混合树与动画融合
2022-07-26 07:39:00 【CoderZ1010】
Mixamo
简介
Mixamo是Adobe公司推出的在线免费角色动画库,地址:Mixamo,我们可以在上面搜索开发所需的角色动画并下载使用。

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

可以通过UPLOAD CHARACTER上传我们自己的Avatar模型来预览动画效果:

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

Unity Animator
Blend Tree 混合树
Blend Tree是Animator Controller动画状态机中的一种特殊状态类型,用于多个动画之间的平滑混合,每个动画对最终效果的影响由混合参数控制,经常用于处理移动动画之间的混合。
例如我们在Mixamo动画库下载了Idle、Walk、Sprint,即静止、行走、奔跑三个动画,接下来想要使用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);
}
}
}
}

边栏推荐
猜你喜欢

Jmeter性能测试之使用存储响应内容到文件监听器

Parameterization of JMeter performance test using CSV file

WCF deployed on IIS

Practice of online question feedback module (XIV): realize online question answering function

dcn(deep cross network)三部曲

Crawler data analysis

Command line execution and test report generation of JMeter performance test

【推荐系统经典论文(十)】阿里SDM模型

Use of JMeter performance test to store response content to file listener

PXE efficient batch network installation
随机推荐
KDD2022 | 揭秘快手短视频推荐Re-ranking之谜,相关推荐新SOTA
[keras entry log (3)] sequential model and functional model in keras
Yaml language-01 (data type, array, object)
TensorFlow学习日记之tflearn
Sort: merge sort and quick sort
C语言关键字extern
Configure flask
OAuth2.0系列博客教程汇总
Devaxpress.xtraeditors.datanavigator usage
Interview question set
Summarize the common high-frequency interview questions of the software testing post
Ethernet switching security
爬虫->TpImgspider
【uniapp】多种支付方式封装
2021全球机器学习大会演讲稿
China Unicom transformed the Apache dolphin scheduler resource center to realize the one-stop access of cross cluster call and data script of billing environment
JMeter性能测试之使用CSV文件参数化
Dynamic performance view overview
排序:归并排序和快速排序
Learning Efficient Convolutional Networks Through Network Slimming