• Root Motion根运动

    Root Motion根运动是一个非常重要的概念。它的原理是:当身体发生了变换,从而引发身体的重心发生改变。即改变了重心或者说身体的方向。这样在地面上则产生了方向上的投影。角色身体的上半身也下半身相对于角色T-pose进行平均计算而产生一个方向矢量。身体变换和方向则在每一帧中都会把变化计算出来,并都存储到动画片段 (Animation Clip) 中。最后施加到游戏对象上。当我们在Inspector面板中勾选上Animator组件中的Apply Root Motion(应用根运动)属性,则会使其产生带方向的移动,而不必在脚本中用Transform方法使其产生位移了。如图 所示。如果不够选此选项,则只会播放动画,而不会产生位置偏移。
    即Unity的Mecanim中,利用角色动画片段中的Root Motion来控制角色在场景中的运动,真正的使角色动画实现了角色运动的驱动。这点对于老版本的动画来说是一个非常大非常方便的改变与提升。

动画组件与动画控制器

Animator动画组件

Animator组件是控制角色模型中的动画行为的组件,或者说是人物模型与动画之间的一个连接。如图 所示。
Animator组件的属性:
* 1、Controller:指定动画控制器资源。动画控制器资源包含了动画的各种逻辑,从而控制角色的运动行为。
* 2、Avatar:指定了Avatar资源,可以使用角色通用的骨骼设置。
* 3、Apply Root Motion:使用Root Motion选项。(上节已做详细介绍)。
* 4.Update Mode:更新模式:Normal表示使用Update进行更新,Animate Physics表示使用FixUpdate进行更新(一般用在和物体有交互的情况下),Unscale Time表示无视timeScale进行更新(一般用在UI动画中)。
* 5.Culling Mode:剔除模式(优化使用)

Animator Controller动画控制器

Animator动画控制器可以设置角色的动画执行逻辑以及动画之间的过渡方式。创建动画控制器非常方便,在Project面板中->Create->Animator Controller。如图 所示。

创建好动画控制器后,双击,则会打开Animator Controller视窗。如图 所示。

我们可以在Animator Controller动画控制器界面中通过点击鼠标右键来添加各种状态机,包括指定默认的状态机、Any State(任意状态)、Blend Tree(混合树状态)、New StateMachine(新状态机)等。我们会在后面的章节做详尽的讲解。

在动画控制器左下角是Parameters(参数)[pə’ræmətɚ]。可以创建4种类型的参数。创建后,可以对参数进行命名或设置其初始值。而动画状态机都是要配合开发者设置的参数来控制其动画之逻辑。

动画状态机及动画过渡

简单的讲,动画状态机可以使一个动画状态过渡到另一个动画状态。通过设置状态之间的过渡,可以非常简单的定义动画之间的逻辑,从而减少繁杂的代码的处理,使动画间的逻辑处理更加的简单、高效。而且进行更新时,也非常的快速。
在创建动画状态机时,每一个动画片段可以看做为一个动画状态机的节点。在Animator窗口面板->单击鼠标右键->Create State->Empty,即可创建一个空的动画状态机。如图 所示。

状态机的属性介绍:如图 所示。
* 1、Speed:指定动画的播放速度。默认为1。可以根据需求加速或者放缓动画的播放速度。
* 2、Motion:指定此动画状态所使用的动画片段。
* 3、Foot IK:在此状态中是否考虑或计算动画中的Foot IK。
* 4、Mirror:产生用动画对应的镜像动画效果。比如动画片段是向左转的动画,通过勾选镜像参数,则会产生向右转的镜像动画。
* 5、Transitions:显示从此节点可以过渡到其它哪些的节点。如图 所示,可以从Base layer层的idle动画可以过渡到Base Layer层的walk动画。


第一个创建的动画状态机为默认的状态,游戏运行时会先执行此状态的动画,而默认状态为黄色。我们也可以手动指定默认的状态。只要选中要指定的状态->鼠标右键->Set As Default即可。如图 所示。
此时,在Inspector面板中的Motion(动作)属性中,可以拖放进来要播放的对应的动画片段。当然,方便起见,也可以通过拖拽动画片段直接到Animator窗口面板中,则可直接创建一个对应的动画状态。如图 所示。

有了不同的动画片形成不同的动画状态,使它们之间的过渡,才能把不同的状态关联起来。我们选中一个状态->鼠标右键->Make Transition即可完成动画间的过渡。如图 所示。

从一个动画状态机过渡到另一个动画状态,需要一定的要求或者限制。我们可以通过设置左下角的Parameters(参数)属性来完成。

一个Animator动画状态机的窗口视图打开后,一般会有一个绿色的动画状态,Any State(任意动画状态)。我们可以理解此为不确认的动画状态,或者理解为是任意的动画状态。也就是说,当它与某个动画状态创建过渡后,则说明任何的动画状态只要满足条件后都可以过渡到此动画状态中。比如,Any State过渡到dead死亡状态,则说明任意动画状态只要满足游戏人物死亡的条件时,都可以过渡到dead动画状态上。
控制动画状态过渡实例
* 1、创建Animator状态机,并添加idle和walk两个动画状态。

  • 2、添加walk参数。并指定过渡。


  • 3、写如下脚本:
using UnityEngine;
using System.Collections;public class AnimatorController : MonoBehaviour {private Animator anim;//声明Animator动画组件void Start(){anim = this.gameObject.GetComponent<Animator>();//获取Animator组件}void Update(){if (anim)//如果Animator组件是存在的{//获取当前层,0为基础层AnimatorStateInfo currentStateInfo = anim.GetCurrentAnimatorStateInfo(0);//如果Base Layer层的idle状态存在if (currentStateInfo.IsName("Base Layer.idle"))//等价于:stateInfo.nameHash == Animator.StringToHash("Base Layer.idle"){//当点击键盘A键的时候   ,设置walk状态为真(由idle状态过渡到run状态)if (Input.GetKeyDown(KeyCode.A)) anim.SetBool("walk", true);}if (currentStateInfo.IsName("Base Layer.walk")){if (Input.GetKeyDown(KeyCode.B)) anim.SetBool("walk", false);}}}
}

Unity-动画系统-Animat相关推荐

  1. Unity动画系统详解10:子状态机是什么?

    摘要:除了使用Layer还有没有更好的组织状态的方式呢?感觉一个Layer里面状态多的时候,还是很显得很乱. 洪流学堂,让你快人几步.你好,我是跟着大智学Unity的萌新,我叫小新,这是复(yu)习( ...

  2. Unity动画系统详解9:Target Matching是什么?

    摘要:在游戏中,经常有这种情况:角色的手或者脚需要在特定时间放在特定的位置.比如角色需要用手撑着跳过一个石头或一堵墙,或者跳起抓住房梁.Target Match就是让动画的特定片段去匹配特定的位置. ...

  3. Unity动画系统详解5:BlendTree混合树是什么?

    摘要:"Animator中有一个功能,用来解决多个动画之间的混合,经常用于移动动画之间的混合,这个功能叫做BlendTree,混合树." 洪流学堂,让你快人几步.你好,我是跟着大智 ...

  4. Unity动画系统学习

    Unity动画系统学习 文章目录 Unity动画系统学习 AnimationState 动画状态 Animation Transitions 动画过渡 动画分层和遮罩 动画混合 1D混合 2D混合 动 ...

  5. Unity动画系统详解4:如何用代码控制动画?

    摘要:通过上一篇咱们知道了播放动画需要使用Animator,那么如何用代码控制动画呢? 洪流学堂,让你快人几步.你好,我是跟着大智学Unity的萌新,我叫小新,这几周一起来复(yu)习(xi)动画系统 ...

  6. Unity动画系统常用知识总结

    Unity动画系统常用知识总结 资源导入需要注意的地方 常用的组件 Animator 组件 Avatar Mask 骨骼遮罩 Animator Controller 动画切换 Any State Ha ...

  7. Unity动画系统详解8:IK是什么?

    摘要:IK是Inverse Kinematic的缩写,也就是反向动力学.是根据骨骼的终节点来推算其他父节点的位置的一种方法.比如通过手的位置推算手腕.胳膊肘的骨骼的位置. 洪流学堂,让你快人几步.你好 ...

  8. Unity动画系统详解6:如何做好角色的移动动画?(Root Motion详解)

    摘要:Root Transform是body transform在Y平面上的投影,并且是运行时计算的.每一帧Root Transform的变化实时计算.然后Transform的变化会被应用到GameO ...

  9. VR开发——Unity动画系统(V客it学院技术分享)

    在我们进行VR开发的过程中,免不了需要各种各样的模型动画.那么面对这样的简单动画,我们大可以使用Unity的动画系统来完成整个事情. 前段时间我在博客看见了一篇非常不错的动画系统讲解,今天我就借花献佛 ...

  10. Unity动画系统详解3:如何播放、切换动画?

    摘要:[长文预警,建议先收藏]有了模型和多个动画以后,在Unity中如何控制它们的播放和切换呢?本文带你一站式解析Unity的Animator模块. 洪流学堂,让你快人几步.你好,我是跟着大智学Uni ...

最新文章

  1. eclipse如何卸载adt插件
  2. 关于RelativeLayout设置垂直居中对齐不起作用的问题
  3. 【鸿蒙 HarmonyOS】UI 布局 ( 网格布局 TableLayout )
  4. ASP.Net MVC——使用 ITextSharp 完美解决HTML转PDF(中文也可以)
  5. Linux:建立内核代码树
  6. leetcood学习笔记-107-二叉树的层次遍历二
  7. leetcode题解102-二叉树的层序遍历
  8. 74cms v5.0.1 漏洞复现
  9. DeeCamp2022正式开营!李开复、张亚勤亲授大师课 | 创新事
  10. 【C语言】输出百分号“%”
  11. mac php pear pecl,mac 安装 pecl pear
  12. python做爬虫选课_Python2爬虫:以爬取大学本学期绩点为例(实战)
  13. 雪糕大军纷纷网红出道,“天价”背后是什么让消费者买单?
  14. [SWPU2019]伟大的侦探1
  15. 欧几里得算法求解最大公因数详解
  16. STM32简易示波器
  17. 摩拜OFO单车哪家强,看他们的网站似乎发现了点什么
  18. Google Map Event 谷歌地图事件
  19. 《与人沟通的技巧:聊天》学习总结
  20. doo14 视图和js的按钮上面的交互

热门文章

  1. 程序员 做头发 奇遇记
  2. python爬取加密qq空间_怎么利用爬虫爬取QQ空间中设置了权限的无法正常访问的内容?...
  3. 睡眠障碍,正在“杀死”3亿中国人
  4. 介绍 Jersey 依赖
  5. PL.SQL.Developer.v9.0.1.1613下载地址
  6. 如何准备国家公务员考试
  7. 赚一辈子的钱,还是一辈子赚钱? 掌握下一个财富分配周期的法则
  8. 文本情感倾向分析——机器学习模型
  9. idea代码编辑CPU使用率飙升100%
  10. python矩阵求每个元素平方矩阵