Hello,大家好,今天给大家分享一篇干货,Unity动画系统设计介绍(上),感兴趣的朋友可以一起来看下!
这两年和几个朋友一起讨论Unity动画系统,包括折腾了几次相关的组内分享,总结出很多内容。主要是关于设计和对象方面,陈列一下。
一、动画系统
1、简介
Unity现存两套动画系统:Legacy动画系统和Mecanim动画系统。Legacy动画系统功能相对简单,核心组件Animation;Mecanim动画系统是Unity当前主要的动画系统,在Legacy动画系统上增加很多新的概念,功能相对复杂,核心组件Animator。
2、动画曲线(AnimationCurve)
Unity中的AnimationCurve是一根二维曲线,在动画文件中曲线根据作用被分成了不同类型类型,具体分类可用下图表示:
不同类型BindCurve在Animation窗口内有不同的图标,图标由Curve绑定的组件来决定,Curve前显示的图标表示其控制的内容归属组件,其中最需要关注的是TransformCurve和MuscleCurve,前者图标是Transform的图标,后者图标是Animator的图标,属于Mecanim机制的Generic和Humanoid动画片在运行时是不会保留原始动画曲线数据的(在编辑器下会)。
所以运行期不能在Legacy机制下采样播放(但编辑器下可以),RootMotionCurve是程序内部生成的对象,它的特殊之处在于储存的值是相对整个模型空间的变换,而不是相对父节点的局部变换。
二、动画资产
1、资产的导入
Unity会对支持的文件执行导入流程,实际在引擎中出现的文件是导入流程生成的Unity对象。Unity导入模型和动画文件之后提供了很多的设置,导入设置面板中Rig和Animation选项页大部分都与动画相关。
最重要的选项是Rig/Animation Type,除无动画的None以外有三个选项,分别代表:
Legacy – 模型和动画数据都会被处理为Legacy系统的动画数据;
Generic – 模型和动画数据都会被处理为Mecanim系统的非人形动画数据,需要配置或者自动为模型资产创建对应的Avatar实例;
Humanoid – 模型和动画数据都会被处理为Mecanim系统的人形动画数据,需要配置或者自动生成模型骨骼创建Avatar实例和Human实例。
2、动画片段(AnimationClip)
动画片段是AnimationClip类型的对象,.anim资产文件,是Unity中动画数据的存在形式,AnimationClip数据实际上就是以绑定对象为索引的AnimationCurve数据集合。
所有的动画Fbx文件导入后都是生成AnimationClip类型的对象,只是资源管理器里的文件后缀名并不是.anim,且在引擎内禁止修改。导入的动画片段拷贝副本后,可以进行曲线修改和删除,导入DCC文件会根据关键帧拟合得到动画曲线,Unity有三种曲线拟合方式,埃尔米特曲线拟合、线性拟合和离散值。
默认情况下都是埃尔米特曲线拟合,也就是根据关键帧拟合出三次曲线,但如果导入动画资产时开启了动画压缩,则根据误差设置,Unity会自动在误差允许内使用线性拟合乃至保留离散的关键帧。
Unity不会在导入流程中使用离散值拟合,所以DCC软件里做的数值离散动画在Unity内播放会出现不合理的插值帧。
3、动画的控制器
Mecanim的动画播放控制是由有限状态机和动画层级来完成,由Animator Controller做有限状态机层级的容器,Animator需要指定Animator Controller;
Animator Controller只能在编辑环境配置,运行期不可改,Animator Controller可以设置黑板参数(逻辑容器),可以在脚本中获取,也可以作为转移条件;如果黑板参数名字与播放的Custom Curve相同,则伴随动画播放动态修改。
Animator Controller核心概念就是Layer,State和Transition,就是层级,状态,转移,一个状态可以是播放一个动画片段的节点、一个子状态机或者混合树,Layer之间可以进行动画覆盖与附加,输出可以使用Avatar Mask进行剔除。
Sync选项可以让多个层级使用一个状态机,但是每个状态上可以播放不同的动画,Mecanim的IK也是以层级为单位。
State可以进行一些播放状态的设置,Mecanim的动画混合是使用BlendTree完成的,BlendTree可以作为一种State存在,Unity的BlendTree没有什么特殊设置。
Foot IK选项不意味着开启足部IK,而是启用足部IK相关的一些前处理,主要有两个:启用Human设置中的Feet Spacing,确保双足骨骼在Z轴上差距2倍Feet Spacing;根据Root Motion得到的速度进一步修正双足骨骼的位置。
Transition控制State之间的转移,主要依赖条件有两个,退出时间Exit Time以及参数条件Condition,两者均满足才会发生转移,转移有Solo和Mute标签,前者表示优先转移,后者表示禁用。
Animator Controller的动画融合是在转移的时候完成的;
可以在编辑器里配置转移打断相关的设置。
4、Avatar
Avatar文件是Mecanim方案里负责记录模型骨骼层级结构相关的数据合集,也会储存重定向方案相关的数据;
DCC文件导入时会生成或者依赖一个确定的Avatar文件完成动画数据的导入流程;
Animator组件可以通过指定Avatar文件完成骨骼层级结构的初始化,但也可以通过配合动画控制器查询当前模型子节点获取,所以Avatar文件并不是必须的。
来源:知乎
作者:Yene
热门课程
专业讲师指导 快速摆脱技能困惑相关文章
多种教程 总有一个适合自己专业问题咨询
你担心的问题,火星帮你解答学习游戏开发班可以帮助游戏爱好者从零基础成为游戏开发专家,掌握全面的游戏开发技能。
火星时代教育为您提供专业的界面设计实战班,在实践中掌握界面设计的核心技巧和最新趋势,成为优秀的UI设计师。
了解UI交互设计培训的最佳选择,比较不同培训机构的优势和特点。
火星时代教育为您推荐专业的学影视后期培训机构,提供高质量的培训内容及资深导师指导,助您成为优秀的影视后期剪辑师或合成师。
火星时代教育是一家专注于交互设计培训的机构,为学员提供专业的交互设计培训课程,并帮助他们成为优秀的交互设计师。
本文章将介绍关于UE5智慧城市专业学习的重要性和火星时代教育的资讯。
1. 打开微信扫一扫,扫描左侧二维码
2. 添加老师微信,马上领取免费课程资源
同学您好!