Unity---动画系统学习(4)---使用混合树(Blend Tree)来实现走、跑、转弯等的动画切换
1. 介绍
Blend Tree用于多个动画之间的混合,比如走到跑的切换、转弯的切换。
如果用动画学习笔记(3)中的方法,需要新建很多的状态,不仅麻烦,而且切换状态时也很容易不流畅。
而Blend Tree就很好的解决了这个问题
2. 1D Blend Tree 的使用
右键新建一个Blend Tree,双击

在右侧添加三个Motion,Idle、Walk、Run(使用动画学习笔记2中的资源)

Parameter:设置动画根据哪个参数进行融合
Automate Thresholds:是否自动选择参数
选择参数Parameter为Speed,取消勾选Automate Thresholds。
在动画学习笔记(3)中,我们就是使用Speed来控制Walk动画的播放,当按下W时,Speed的值插值增加到1,当按下Shift时,从Walk动画切换到Run动画。
在这里我们同样使用Speed,不同于3的是把Walk和Run融合到一起,按下W会先从Idle切换到Walk,再变为Run,这样就会显得比较自然流畅。
在Compute Thresholds中选择Speed,会根据动画的偏差给走和跑赋一个值(也可以自己微调)。
注意这里Speed的值范围是从0~4.1
private int speedID = Animator.StringToHash("Speed");
private float speedMax = 4.1f
private Animator anim;
void Start()
{
anim = gameObject.GetComponent<Animator>();
}
void Update()
{
anim.SetFloat(speedID, Input.GetAxis("Vertical")*speedMax);
}

可以发现三个动作的切换非常的流畅
3. 2D Blend Tree的使用
2D Simple Directional:适用于动画都有不同的方向。
2D Freeform Directional:和第一个区别是可以有动画在一个方向上。要保证一个在原点(0,0)的动画,比如idle
2D Freeform Cartesian:适用于动画不表示不同的方向
新建两个参数:SpeedZ和SpeedRotate,一个控制直线移动,一个控制转弯。
添加5个动画

我们使用2D Freeform Directional
设置X Position From---Augular Speed(Deg角度)
设置Y Position From---VelocityZ(Z轴速度)

系统会根据偏移自动设置好,我们只需要使用这个值就可以了。
代码
private int speedZID = Animator.StringToHash("SpeedZ");
private int speedRotateID = Animator.StringToHash("SpeedRotate");
private float speedMax = 4.1f;
private float speedRotateMax = 126.1f;
private float dampTime = 0.2f;
private Animator anim;
void Start()
{
anim = gameObject.GetComponent<Animator>();
}
void Update()
{
anim.SetFloat(speedZID, Input.GetAxis("Vertical")*speedMax);
anim.SetFloat(speedRotateID, Input.GetAxis("Horizontal")*speedRotateMax,dampTime,Time.deltaTime);
}
//SetFloat的另一种重载方式
//第3个参数表示完成变化所需要的时间,可以给一个比较小的值,相当于自带了一个插值运算Lerp,是动画更加平滑
//第4个参数表示执行该方法的时间间隔,我们的动画是每帧都在运动,所以设置为Time.deltaTime

Unity---动画系统学习(4)---使用混合树(Blend Tree)来实现走、跑、转弯等的动画切换的更多相关文章
- Unity3D之Mecanim动画系统学习笔记(九):Blend Tree(混合树)
认识Blend Tree 我们在Animator Controller中除了可以创建一个State外还可以创建一个Blend Tree,如下: 那么我们看下新创建的Blend Tree和State有什 ...
- Unity3D之Legacy动画系统学习笔记
Unity3D的Mecanim动画系统是非常强大的,而且作为Unity推荐的动画系统,其未来会完全代替老的一套动画系统,即Legacy动画系统.目前的情况是Mecanim与Legacy两套动画系统同时 ...
- Unity中的动画系统和Timeline(3) 混合树和动画匹配
混合树 前面我们通过在Animation界面添加单独的动作来控制动画,这样做比较麻烦,每个单独的属性,比如站立,奔跑等,都需要单独的代码来控制.现在我们可以通过使用混合树,其基本思想是将相近的动画混合 ...
- Unity3D之Mecanim动画系统学习笔记(一):认识Mecanim动画系统
Mecanim简介 Mecanim动画系统是Unity3D4.0开始引入的一套全新的动画系统,主要提供了下面4个方面的功能: 针对人形角色提供一套特殊的工作流. 动画重定向的能力,可以非常方便的把动画 ...
- Unity3D之Mecanim动画系统学习笔记(七):IK(反向动力学)动画
什么是IK? IK(Inverse Kinematics)即反向动力学,即可以使用场景中的各种物体来控制和影响角色身体部位的运动,一般来说骨骼动画都是传统的从父节点到子节点的带动方式(即正向动力学), ...
- Unity3D之Mecanim动画系统学习笔记(五):Animator Controller
简介 Animator Controller在Unity中是作为一种单独的配置文件存在的文件类型,其后缀为controller,Animator Controller包含了以下几种功能: 可以对多个动 ...
- Unity3D之Mecanim动画系统学习笔记(二):模型导入
我们要在Unity3D中使用上模型和动画,需要经过下面几个阶段的制作,下面以一个人形的模型开发为准来介绍. 模型制作 模型建模(Modelling) 我们的美术在建模时一般会制作一个称为T-Pose( ...
- Unity3D之Mecanim动画系统学习笔记(十一):高级功能应用
动作游戏 还记得读书的时候熬夜打<波斯王子>的时光,我们的王子通过跳跃穿过墙壁的小洞.在高层建筑上进行攀爬和跳跃,还有在操作失误掉下高楼和触发必死机关后使用时之沙的时光倒流功能回归死亡之前 ...
- Unity3D之Mecanim动画系统学习笔记(八):Animator Layers(动画分层)
解决什么问题? 动画分层可以用来解决什么样的问题呢?试想一下如果你要开发一款第三人称的射击游戏,那么肯定是希望身体的动画分为上下两部分,上方根据瞄准的位置和是否射击进行动画播放,下方根据移动播放动画. ...
随机推荐
- kibana-4.6.3-linux-x86_64.tar.gz的下载(图文详解)
对于Kibana ,我们知道,是Elasticsearch/Logstash/Kibana的必不可少成员. 第一步:进入Elasticsearch的官网 https://www.elastic.co/ ...
- 关于jquery在页面初始化时radio控件选定默认值的问题
网上找了很多资料,都是比较旧版本的方法,新版的jquery都已经抛弃了. 正确的代码是 $('input:radio[name="statusRadios"][value=&quo ...
- 【281】◀▶ arcpy.mapping 常用类说明
arcpy.mapping 教程入门 arcpy.mapping 指导原则 按字母顺序排序的 arcpy.mpping 类列表 按字母顺序排序的 arcpy.mpping 函数列表 按字母顺序排序的 ...
- alsa-lib及alsa-utils成功移植(原…
准备工作 alsa-lib版本:alsa-lib-1.0.23.tar.bz2 alsa-util版本:alsa-utils-1.0.23.tar.bz2 其他版本的alsa-lib和alsa-uti ...
- ubuntu apt-get用法
如何在ubuntu下面直接查找想要安装的软件?比如我想安装tomcat,但是我又不知道ubuntu里面有哪些版本,也不知道都需要装什么,但是我能确认我装的是tomcat,那么我就可以用搜索命令:例如: ...
- 字节流之文件输入流FileInputStream
- codeforce452DIV2——E. Segments Removal
题目 Vasya has an array of integers of length n. Vasya performs the following operations on the array: ...
- 刷题向》DP》放苹果 (normal)
这篇博客可能字数比较多,而且很难讲清楚,我会努力给你们讲清楚: 首先,放苹果是一道DP,之所以难,是因为很难想到,我的确有同学用三维数组做出来,然而三维的的确比二维好理解,但三维复杂度太高,虽然DP一 ...
- 获取文件的后缀名。phpinfo
1: function get_extension($file){ //strrchr 返回 .jpg substr :1 是从1开始. substr(strrchr($file,'.'),1) } ...
- 基于 EntityFramework 的数据库主从读写分离架构 - 目录
基于 EntityFramework 的数据库主从读写分离架构 回到目录,完整代码请查看(https://github.com/cjw0511/NDF.Infrastructure)中的目 ...