摘要:在Unity中只能制作比较简单的动画,要想要复杂的动画,比如人物跳舞的动画,那就得在外部的软件中制作并且导入到Unity中使用,那这个过程是什么呢?

大话Unity,让你快人几步。你好,我是跟着大智学Unity的萌新,我叫小新,这几周一起来复(yu)习(xi)动画系统。

小新:“智哥,昨天我搞了一个美女的模型,如何让它动起来呢?”

大智:“你小子整个美女的模型想干嘛呢?”

小新:“我就是想让她跳一段舞蹈罢了。。。”

大智:“在Unity中制作动画的功能有限。类似角色的复杂动画,需要用到一种叫骨骼动画的技术,无法直接在Unity中制作,需要美术同学在外部建模软件中制作后导入Unity使用。”

今天我们来学习一下如何从模型文件导入动画。

在接下来学习之前呢,你需要准备好带动画的模型,如果你手边没有,可以看看大智之前的文章:

导入模型

导入动画和导入3D模型的流程一样,动画会包含在3D模型中。

大多数情况下,含动画的模型导出的fbx文件会同时包含网格信息和动画信息,但是也有一些情况fbx文件只需要导出动画信息。例如同一个模型有很多动画,网格信息只需要一个就够了,其他动画信息可以通过单独的模型文件(不包含网格信息)导出,可以减小Unity工程的体积。

有些情况下,动画是基于特定模型制作的,不能在其他模型上重用。例如,游戏中的终极Boss巨型章鱼会有独特的骨骼,以及自己的动画。

在其他情况下,美术同学在制作动画时应该考虑动画的重用,用于场景中同类的模型。例如,不同的人形角色可能都使用相同的走动和跑步动画。只要保持骨骼结构一致,动画就可以重用。

动画导入设置

首先将fbx文件导入Unity中,选中模型。在Inspector面板中会显示模型的导入设置,之前我们已经学习了Model和Materials页签,今天我们看下动画导入的设置。

和动画有关的设置包含Rig和Animation两个页签。

Rig

在Rig页签中可以设置动画的类型。

Animation Type 动画类型选项有4个:

  • None 不导入动画
  • Generic 通用动画:适用于所有的动画类型,特别适用于非人形的动画。
  • Humanoid 人形动画
  • Legacy 旧版本动画(为了兼容Unity3.x旧版本,不建议使用)

Avatar Definition 如果动画是骨骼动画,可以使用这个选项定义骨骼的来源。

  • Create from this model 基于当前模型
  • Copy from other Avatar 指向另一个模型的Avatar

Root node 当动画类型选择Generic时显示,可以用来设置动画的根节点。一般需要选中骨骼的根节点。

Configure… 选中Humanoid时显示。用来配置骨骼。后面动画进阶模块,讲解人形动画时会详解。

Skin Weights 设置有多少骨骼会影响蒙皮,骨骼数越多,动画越精准,但是计算量越大,对性能要求越高。

  • Standard(4 Bones):4块骨头
  • Custom:自定义,可以设置最大的骨骼数量以及最小的影响权重

骨骼动画是一种动画技术,通过给模型绑定骨骼,通过骨骼的运动影响蒙皮(人形模型的皮肤)的变形动画。

Optimize Game Object 选中时,导入的角色模型的层次结构将被删除,存储在Avatar和Animator组件中。角色的SkinnedMeshRenderers将直接使用动画系统内置骨架。该选项可提高动画的性能。在最终发布时你应该选中此选项。在此模式下,蒙皮网格的提取也是多线程的。

Animation

这个页签中会显示动画导入的设置。如果Rig页签中的Animation Type选择了None,则无法设置Animation相关的属性。

Import Constraints 是否导入Constraints(约束)。美术同学可能知道在3D建模软件中有Constraints设置,用来添加一些约束。Unity支持5种约束的导入。目前用到的较少。

Import Animation 是否导入动画,如果不勾选代表不导入动画,下面的选项也会隐藏。

Bake Animations 该选项只对Maya、3dsMax 、Cinema4D文件可用,对fbx文件不可用。选中时,Unity在导入模型时会将IK或模拟动画转为正向动力学动画。

Anim. Compression 动画压缩

  • Off 禁用压缩。Unity不会减少关键帧,这个选项能提高动画的精度,但是会降低运行时性能,存储空间和运行时内存占用都会变大。一般不建议禁用压缩,但如果你需要非常精准的动画,禁用后可以得到原始动画,不会有压缩精度误差。
  • Keyframe Reduction 根据设置的误差值移除关键帧。
  • Optimal Unity自动决定如何压缩。根据设置的误差值移除关键帧并且压缩关键帧。这只会减小动画存储空间占用,运行时内存占用和 Keyframe Reduction 相同。

Anim. Compression 不选择Off时,会显示下面三个选项:

  • Rotation Error 旋转变化小于这个误差的关键帧会被删除。值越小动画越精确。
  • Position Error 位置变化小于这个误差的关键帧会被删除。值越小动画越精确。
  • Scale Error 缩放变化小于这个误差的关键帧会被删除。值越小动画越精确。

Animated Custom Properties 是否导入自定义属性。在3D建模软件中可以设置一些自定义属性,这个选项可以将这些自定义属性导入进来。

Clips 动画片段,Start和End分别代表了该段动画在整段动画中的起始帧和结束帧。下面详细学习。

分割动画

从3D建模软件导入到Unity中的动画,有时是很多段动画在一起的一段很长的动画,可能包括走路、跑步、站立、跳跃等动画。但是在Unity中使用时,我们需要将长动画拆分为一段段短动画。

创建一段新的Clip

如上图,点击加号可以创建一段新的动画,可以在下方设置该段动画在完整动画中的起始帧和结束帧。设置时,可以下下方预览窗口查看当前移动位置的动画状态。

设置动画Clip的起始结束位置

在拖动起始、结束箭头时,能看到下方会显示4条曲线,右方有4个灯,会显示绿色、黄色或红色。这是做什么用的呢?

其实这些是为了方便你在剪辑动画时,能更好地剪出循环的动画。比如一个跑步的循环动画,起始帧人物各个骨骼的位置应该和结束帧人物各个骨骼的位置一致,动画循环时才不会出现跳动的现象。绿灯代表开始帧和结束帧符合,黄灯代表有些不符合,红灯代表一点都不符合。但是也不能追求4个全绿灯,因为4个灯代表了4个不同的位置类型,有些情况下是不同的。后续动画模块会详细学习。

Loop Time 如果动画需要循环播放时,勾选此选项。

其他属性我们会在后续动画模块进行讲解。

点击Apply保存对模型的修改

最后,别忘了点击最下方的Apply保存对模型动画的修改。

如何在场景中使用外部导入的动画

对于从外部导入的模型及动画,如果直接拖到场景中,是不会自动播放动画的。原因是没有Animator Controller,那Unity当然不知道你要播放哪个动画啦。如下图所示:

那么如何实现最简单的动画播放呢?

只要按照以下几步做即可:
1、将模型拖到场景中
2、将Animation Clip拖到刚拖入场景的模型GameObject上。这时候Unity会自动帮你生成一个Animator Controller,这个Animator Controller中会自动把刚才拖的Clip作为默认动画进行播放。

播放导入的动画.gif

这时候如果你再Play,就能看到模型就能动起来啦。(当然前提是这个Clip和这个模型是对应的哦!)

总结

大智:“今天讲了如何将外部模型动画导入到Unity中,希望你能记住以下几点:”
1、Animation Type选项有4个:

  • None 不导入动画
  • Generic 通用动画:适用于所有的动画类型,特别适用于非人形的动画。
  • Humanoid 人形动画
  • Legacy 旧版本动画(为了兼容Unity3.x旧版本,不建议使用)

2、在Unity中可以分割动画成为一个个片段。

今日思考题

大智:“导入Standard Assets中的Character包,看看里面的动画是如何设置的。”
小新:“好嘞~”

扩展阅读

【扩展学习】大话Unity公众号回复动画可以阅读本系列所有文章,更有视频教程等着你!


呼~ 今天小新絮絮叨叨的真是够够的了。没讲清楚的地方欢迎评论,咱们一起探索。

我是大智(微信:zhz11235),你的技术探路者,下次见!

别走!点赞收藏哦!

好,你可以走了。

Logo

分享前沿Unity技术干货和开发经验,精彩的Unity活动和社区相关信息

更多推荐