摘要:在Unity中只能制作比较简单的动画,要想要复杂的动画,比如人物跳舞的动画,那就得在外部的软件中制作并且导入到Unity中使用,那这个过程是什么呢?
洪流学堂,让你快人几步。你好,我是跟着大智学Unity的萌新,我叫小新,这几周一起来复(yu)习(xi)动画系统。
小新:“智哥,昨天我搞了一个美女的模型,如何让它动起来呢?”
大智:“你小子整个美女的模型想干嘛呢?”
小新:“我就是想让她跳一段舞蹈罢了。。。”
大智:“在Unity中制作动画的功能有限。类似角色的复杂动画,需要用到一种叫骨骼动画的技术,无法直接在Unity中制作,需要美术同学在外部建模软件中制作后导入Unity使用。”
今天我们来学习一下如何从模型文件导入动画。
在接下来学习之前呢,你需要准备好带动画的模型,如果你手边没有,可以看看大智之前的文章:
- Unity2018.1后如何安装自带的Standard Assets中的Character包
- 【建议收藏】找不到免费的角色动画?来试试mixamo
导入模型
导入动画和导入3D模型的流程一样,动画会包含在3D模型中。
大多数情况下,含动画的模型导出的fbx文件会同时包含网格信息和动画信息,但是也有一些情况fbx文件只需要导出动画信息。例如同一个模型有很多动画,网格信息只需要一个就够了,其他动画信息可以通过单独的模型文件(不包含网格信息)导出,可以减小Unity工程的体积。
有些情况下,动画是基于特定模型制作的,不能在其他模型上重用。例如,游戏中的终极Boss巨型章鱼会有独特的骨骼,以及自己的动画。
在其他情况下,美术同学在制作动画时应该考虑动画的重用,用于场景中同类的模型。例如,不同的人形角色可能都使用相同的走动和跑步动画。只要保持骨骼结构一致,动画就可以重用。
动画导入设置
首先将fbx文件导入Unity中,选中模型。在Inspector面板中会显示模型的导入设置,之前我们已经学习了Model和Materials页签,今天我们看下动画导入的设置。
和动画有关的设置包含Rig和Animation两个页签。
Rig
在Rig页签中可以设置动画的类型。
Animation Type
- None
- Generic
- Humanoid
- Legacy
Avatar Definition
- Create from this model
- Copy from other Avatar
Root node
Configure…
Skin Weights
- Standard(4 Bones):4块骨头
- Custom:自定义,可以设置最大的骨骼数量以及最小的影响权重
骨骼动画是一种动画技术,通过给模型绑定骨骼,通过骨骼的运动影响蒙皮(人形模型的皮肤)的变形动画。
Optimize Game Object
Animation
这个页签中会显示动画导入的设置。如果Rig页签中的Animation Type选择了None,则无法设置Animation相关的属性。
Import Constraints
Import Animation
Bake Animations
Anim. Compression
- Off 禁用压缩。Unity不会减少关键帧,这个选项能提高动画的精度,但是会降低运行时性能,存储空间和运行时内存占用都会变大。一般不建议禁用压缩,但如果你需要非常精准的动画,禁用后可以得到原始动画,不会有压缩精度误差。
- Keyframe Reduction
- Optimal Unity自动决定如何压缩。根据设置的误差值移除关键帧并且压缩关键帧。这只会减小动画存储空间占用,运行时内存占用和 Keyframe Reduction
Anim. Compression
- Rotation Error
- Position Error
- Scale Error
Animated Custom Properties
Clips
分割动画
从3D建模软件导入到Unity中的动画,有时是很多段动画在一起的一段很长的动画,可能包括走路、跑步、站立、跳跃等动画。但是在Unity中使用时,我们需要将长动画拆分为一段段短动画。
创建一段新的Clip
如上图,点击加号可以创建一段新的动画,可以在下方设置该段动画在完整动画中的起始帧和结束帧。设置时,可以下下方预览窗口查看当前移动位置的动画状态。
在拖动起始、结束箭头时,能看到下方会显示4条曲线,右方有4个灯,会显示绿色、黄色或红色。这是做什么用的呢?
其实这些是为了方便你在剪辑动画时,能更好地剪出循环的动画。比如一个跑步的循环动画,起始帧人物各个骨骼的位置应该和结束帧人物各个骨骼的位置一致,动画循环时才不会出现跳动的现象。绿灯代表开始帧和结束帧符合,黄灯代表有些不符合,红灯代表一点都不符合。但是也不能追求4个全绿灯,因为4个灯代表了4个不同的位置类型,有些情况下是不同的。后续动画模块会详细学习。
Loop Time
其他属性我们会在后续动画模块进行讲解。
最后,别忘了点击最下方的Apply保存对模型动画的修改。
如何在场景中使用外部导入的动画
对于从外部导入的模型及动画,如果直接拖到场景中,是不会自动播放动画的。原因是没有Animator Controller,那Unity当然不知道你要播放哪个动画啦。如下图所示:
那么如何实现最简单的动画播放呢?
只要按照以下几步做即可:
1、将模型拖到场景中
2、将Animation Clip拖到刚拖入场景的模型GameObject上。这时候Unity会自动帮你生成一个Animator Controller,这个Animator Controller中会自动把刚才拖的Clip作为默认动画进行播放。
这时候如果你再Play,就能看到模型就能动起来啦。(当然前提是这个Clip和这个模型是对应的哦!)
总结
大智:“今天讲了如何将外部模型动画导入到Unity中,希望你能记住以下几点:”
1、Animation Type选项有4个:
- None
- Generic
- Humanoid
- Legacy
2、在Unity中可以分割动画成为一个个片段。