Unity动画系统常用知识总结
Unity动画系统常用知识总结
- 资源导入需要注意的地方
- 常用的组件
- Animator 组件
- Avatar Mask 骨骼遮罩
- Animator Controller
- 动画切换
- Any State
- Has Exit Time:是否有退出时间(是否一定要播放完当前动画才可以切换到下一个)
- 如何让两个动画同时播放,例如一边走路一边挥手
- 混合树
- 1D
- 2D
- IK反向动力学
- 动画事件
资源导入需要注意的地方
导入数据的时候,需要看当前模型是否符合unity的正常大小。
方法:创建一个Cube,然后将模型拖到场景中与Cube比较一下大小,如果大小不合适需要在模型中调整,而不是调整unity的游戏物体,避免出现不必要的错误。
常用的组件
Animator 组件
重点介绍一下前三个。
Contorller:游戏状态控制器,控制当前角色处于什么状态(播放对应的动画)。
Avatar:骨骼,当前人物模型的骨骼,通常情况下美工配好。
只要有经过处理的Avatar,我们就可以通过 Animator Controller动画控制器控制人物模型播放一组制定的动画。
所以符合Avatar进行Retaring重定向的条件为:
1、相同的Animator Controller控制器。
2、都有经过成功处理的Avatar资源组件(可以不是同一个Avatar)。
3、可以模型不带任何动画。
Apply Root Motion:简单理解,有的动画自带移动,带有矢量,如果勾选,则表明使用动画自带的位移,不适用则自己手写移动相关的代码。
Avatar Mask 骨骼遮罩
在Project面板创建,点击对应的位置,即可让对应的部位无法播放动画,在Animator Controller中的layer层绑定,绑定完之后该layer层下的所有手臂动画无法播放(该图中)。
Animator Controller
动画状态控制器,控制动画切换的核心组件。
动画切换
常用动画切换,创建两个State,然后点击其中一个右键选择Make Transition
在Parameters中添加跳转参数。
可以通过代码控制
animator.SetBool(“CanMove”, true);
满足条件时就会走向下一个状态,如下图。
Any State
代表当前所有状态都可以转向一个,例如死亡,避免出现连线到处都是。
Has Exit Time:是否有退出时间(是否一定要播放完当前动画才可以切换到下一个)
如何让两个动画同时播放,例如一边走路一边挥手
我上家公司做模拟休闲游戏,有个厂长巡查,需要走路,挥手,边走路边挥手功能,下面探讨一下如何实现。
1、让美工一共做三个动画,分别是走路,挥手,走路+挥手,但是这样非常繁琐,而且维护起来也麻烦(需要不同状态之间来回切换)。
2、使用多个layer层
如图所示,Base Layer控制行走,Arm Layer控制厂长挥手,但是需要注意,Arm Layer的权重需要和Base Layer一样,Blending中需要改为Additive,默认是override覆盖重写。
3、使用混合树,下面单独开一个标题讲混合树,但是混合树更适合多种状态之间的平滑处理,而不是同时实现效果。
混合树
1D
在Animator面板中创建BlendTree,先从最简单的1D讲起。
添加一个BlendValue,然后在BlendTree中添加两个行为,最左边是Walk,最右边是Run,动画系统会自动综合。
也可以在混合树中添加混合树,达到与更多效果综合的效果,我用的不多,此处不再赘述。
2D
2D Directional两个差不多,Freedom比Sample更好用一点,但是需要注意,Freedom中必须要有一个0,0点,即Idle状态。
如上图所示,目前一共有五个状态,分别是向前、后、左、右跑,还有一个待机,我们可以获取用户输入WASD的坐标,GetAxis方法,将对应的值传给动画组件。
animator.SetInteger();
然后角色就会做对应的动画。
ps:时间的那个图标,改为负数则是向后运动。
另外,设置完动画这里最好选择Velocity XZ,代表由XZ的坐标控制动画切换,对应两个参数。
剩下的一个笛卡尔积2D,更加复杂,也适合更多的动画平滑切换,我用的不多,此处不再赘述。
IK反向动力学
简单介绍一下,例如你推门,你给门一个力,相对的门也会给你一个力,他会让你的手臂弯曲,这个就被称之为IK反向动力学。
void OnAnimatorIK(int layerIndex){{//设置位置权重animator.SetIKPositionWeight(AvatarIKGoal.RightHand, 1f);//设置旋转权重animator.SetIKRotationWeight(AvatarIKGoal.RightHand, 1f);animator.SetIKPosition(AvatarIKGoal.RightHand, objPosition.position);animator.SetIKRotation(AvatarIKGoal.RightHand, objPosition.rotation);}}
如上图所示,角色右手受到球的影响,需要注意,需要将layer层的IK Pass勾选上,代码中加上对应的逻辑即可。
动画事件
找到资源的动画,在Event这一栏可以添加事件,选择脚本,与脚本的方法即可。选择固定的某一帧执行。
Unity动画系统常用知识总结相关推荐
- Unity动画系统详解10:子状态机是什么?
摘要:除了使用Layer还有没有更好的组织状态的方式呢?感觉一个Layer里面状态多的时候,还是很显得很乱. 洪流学堂,让你快人几步.你好,我是跟着大智学Unity的萌新,我叫小新,这是复(yu)习( ...
- Unity动画系统简单介绍
Unity动画系统知识点简单介绍(简易) 本文是学习文,其中转载某些文章,如有侵权,联系删除. 学习要点: 1.动画的分类 游戏物体的基础动画设置,UGUI设置的按钮状态,2D游戏Sprite动画,R ...
- Unity动画系统详解9:Target Matching是什么?
摘要:在游戏中,经常有这种情况:角色的手或者脚需要在特定时间放在特定的位置.比如角色需要用手撑着跳过一个石头或一堵墙,或者跳起抓住房梁.Target Match就是让动画的特定片段去匹配特定的位置. ...
- Unity动画系统详解5:BlendTree混合树是什么?
摘要:"Animator中有一个功能,用来解决多个动画之间的混合,经常用于移动动画之间的混合,这个功能叫做BlendTree,混合树." 洪流学堂,让你快人几步.你好,我是跟着大智 ...
- Unity动画系统学习
Unity动画系统学习 文章目录 Unity动画系统学习 AnimationState 动画状态 Animation Transitions 动画过渡 动画分层和遮罩 动画混合 1D混合 2D混合 动 ...
- Unity动画系统详解4:如何用代码控制动画?
摘要:通过上一篇咱们知道了播放动画需要使用Animator,那么如何用代码控制动画呢? 洪流学堂,让你快人几步.你好,我是跟着大智学Unity的萌新,我叫小新,这几周一起来复(yu)习(xi)动画系统 ...
- Unity动画系统详解8:IK是什么?
摘要:IK是Inverse Kinematic的缩写,也就是反向动力学.是根据骨骼的终节点来推算其他父节点的位置的一种方法.比如通过手的位置推算手腕.胳膊肘的骨骼的位置. 洪流学堂,让你快人几步.你好 ...
- Unity动画系统详解6:如何做好角色的移动动画?(Root Motion详解)
摘要:Root Transform是body transform在Y平面上的投影,并且是运行时计算的.每一帧Root Transform的变化实时计算.然后Transform的变化会被应用到GameO ...
- VR开发——Unity动画系统(V客it学院技术分享)
在我们进行VR开发的过程中,免不了需要各种各样的模型动画.那么面对这样的简单动画,我们大可以使用Unity的动画系统来完成整个事情. 前段时间我在博客看见了一篇非常不错的动画系统讲解,今天我就借花献佛 ...
最新文章
- PAGER set to stdout_Python || 学习笔记(4):dictamp;amp;set
- Python 在 命令行中 安装 matplotlib
- python工作招聘-爬了招聘网站之后,给你几点学习Python的建议
- python3官方最新下载-Python
- POJ 3635 Full Tank?
- 2017—2018 实验报告:实验一
- 实例29:python
- Linux下apache与tomcat完美整合笔记
- 2019.02.19 bzoj2655: calc(生成函数+拉格朗日插值)
- win10系统下第三方软件字体大小调整
- 软件质量管理体系-ISO 9000
- 操作系统动态分区分配方式C/C++语言(首次适应算法(FF)循环首次适应算法(NF)最best适应算法(BF)最坏适应算法(WF))
- 网线制作IP组网(基于华为eNSP模拟器)
- C# 打开和关闭软键盘
- 11.03 CSS的基础应用
- 大智能时代,未来人工智能发展新趋势
- 弱电流检测必备的保护环
- linux编译.o文件,使用-O0编译Linux内核
- LM38简易方波发生器
- 一、python入门整体快速学习