首页 > 代码库 > 【Unity编程】Unity动画系统(一)
【Unity编程】Unity动画系统(一)
Unity动画系统
Unity动画系统,也称为“Mecanim”,提供了以下功能:
- 简单的工作流程,设置动画的所有元素,包括对象,角色和属性。
- 支持导入外部创建的动画片段和使用内置动画编辑器制作的动画片段。
- 人型动画重新定位,动画角色的运动控制可以被所有的角色模型共享,即角色的外观(SkinedMesh)和运动(Animator)是分离的,它们互相组合之后形成最终的动画。
- 用于编辑动画状态的的简化工作流程,即动画控制器。
- 方便预览动画片段,以及片段之间的插值过渡。 这使得动画师可以独立于程序员工作,在不运行游戏的情况下,可以对原型和预览动画进行预览。
- 管理动画与可视化编程工具之间的复杂交互。
- 不同的身体部位可以使用不同的动画逻辑控制。
- 动画的分层和掩蔽功能。
动画制作流程
- 动画片段制作:动画片段是Unity动画系统的基础,片段中包含了对象如何随时间变化其位置、旋转或其他属性的信息。每个片段可以被认为是一个单一的线性记录。源于外部的动画片段由第三方工具(如Max或Maya)制作,或来自运动捕捉等。
- 动画控制器编辑:使用动画控制器来组织动画片段,动画控制器是类似流程图结构的系统(如上图),它内部拥有一个“状态机”,用于控制当前动画片段的播放,以及何时进行不同片段之间的切换,包括动画片段间的插值过渡和混合,动画控制器的内容被保存为后缀名为”.controller”文件进行存储。
- 片段混合设置:一个非常简单的动画控制器可能只包含一个或两个片段,例如控制在正确的时间开门或者关门的动画。更高级的动画控制器可能包含数十种人形动画片段来表现主角的所有动作,同时可以在多个片段之间进行混合,以便为角色在场景中移动时提供流畅的动作。
- 绑定动画与模型:Unity的动画系统还具有一些特殊功能来处理人形动画,使您能够将任意来源(例如运动捕捉,Asset Store中下载或其他第三方动画库)的人形动画重新定位到您自己的角色模型中,同时定义肌肉调整。这些特殊功能由Unity的Avatar系统提供,它将人形角色映射到了通用的内部格式。
- 引用关系:所有的这些内容 - 动画片段、动画控制器和Avatar,它们都通过GameObject上的Animator组件组合在一起。Animator组件具有对动画控制器(Controller)的引用,以及对该模型的Avatar的引用(如果需要的话)。动画控制器则包含对其使用的动画片段的引用。
Unity的动画系统(被称为“Mecanim”)带有很多概念和术语,可以参参见“动画词汇表”。
传统动画系统
虽然大多数情况下推荐使用Mecanim,但Unity仍保留了在Unity 4之前存在的传统动画系统。有关传统动画系统的信息,请参阅“这里”
Unity未来将把工作流程合并到Mecanim中,逐渐淘汰Legacy动画系统。
动画片段(AnimationClip)
动画片段是Unity动画系统的核心元素之一。 Unity支持从外部源导入动画,另外也提供了一个简易的内置动画编辑器,可以从头开始创建动画片段,目前该动画编辑器不支持人形动画编辑。
源于外部的动画
源于外部导入的动画片段可能包括:
- 动作捕捉获得的人形动画
- 在外部3D应用程序(如3DS Max或Maya)中创建的动画
- 来自第三方库的动画集(例如,来自Unity的资源商店)
- 对导入的单个动画片段的时间轴进行切割后获得的多个动画片段。
在Unity中创建和编辑的动画
你也可以通过Unity的动画界面创建和编辑动画片段,此类动画可以变化以下内容:
- 游戏对象的位置、旋转和比例。
- 组件属性,如材质的颜色,灯光的强度,音量等。
- 你自己脚本中定义的属性,包括float,int,Vector和bool变量
- 你自己脚本中定义的定时调用函数
源于外部的动画
源于外部的动画以普通3D文件的方式导入到Unity中。 这些文件,无论是通用的FBX文件还是诸如Maya,Cinema 4D,3D Studio Max等3D软件的原生格式,都可以在文件中以线性记录的形式存储对象运动的动画数据。
有些时候,执行运动的目标(例如,一个角色)和与之相关的运动动画可以存在于同一个文件中。也有些时候,动画可能存储在独立的文件中,与目标模型分离。
有些动画是为特殊模型单独制作的,不能在其他模型上重复使用。例如,你的游戏中可能有一个终极Boss,是一个巨型章鱼,它会有独特的四肢和骨骼分布,以及属于它自己的一套动画。
在其他大部分情况下,您可能会有一个动画库,用于场景中各种不同的模型。例如,一些不同的人形角色可能都使用相同的行走和奔跑动画。在这些情况下,通常在动画文件中放置一个简单的替代模型,以便进行预览。甚至,即使它们根本没有几何模型,只包含动画数据,也同样可以使用这个动画文件。
导入多个动画片段时,每个动画片段可以作为项目文件单独存在。当从Maya、Max等3D动作编辑器的插件导出时,也可以导出多个动画片段到单个FBX文件中。如果你的文件包含在单个时间轴上排列的多个单独的动画片段,则可能需要执行此操作。例如,在一个捕获时间较长的动画时间轴中,可能包含几个不同的跳跃运动的动画,您可能希望将其中的某些部分用作单个片段,并丢弃其余的部分。 Unity通过允许您为每个片段选择帧范围,在导入所有动画一个时间轴上,提供动画剪切工具来实现区域裁剪。
导入动画文件
在Unity中使用动画之前,需要先将其导入到项目中。 Unity可以导入原生的Maya(.mb或.ma),3D Studio Max(.max)和Cinema 4D(.c4d)文件,以及可以从大多数动画软件导出的通用的FBX文件(有关导出的详细信息,请参阅此处)。 要导入动画,只需将文件拖动到项目的Assets文件夹。 当您在“Project”面板中选择文件时,您可以在“Inspector”面板中编辑导入设置:
有关可用导入选项的完整说明,请参阅FBX导入页面。
从导入的动画文件查看和复制数据。
您可以在“Animation”界面中查看导入的动画片段的关键帧和曲线。 有时,如果这些导入的片段有许多关键帧和多个骨骼,信息量可能看起来非常复杂。 例如,下面的图像是“Animation”界面中一个人形的奔跑动画看起来的样子。【注意Animation不仅仅可以创建和编辑内部动画,也可以浏览源于外部导入的动画,此时动画为只读,不能编辑】
打开“动画”界面,然后请选择指定的带有动画的GameObject(带有Animator组件的节点或者其子节点),“动画”界面将显示骨骼动画的关键帧和曲线。
在查看导入的动画关键帧时,“Animation”界面提供“动画”数据的只读视图。 要编辑此数据,请在Unity中创建一个新的空动画片段(请参阅创建新的动画剪辑),然后从导入的动画片段中选择、复制和粘贴动画数据到你新创建的可写入动画片段。
使用人形动画
Mecanim动画系统特别适合用于类人动物骨骼的动画。由于人形骨骼在游戏中广泛使用,所以Unity提供了专门的工作流程,还有一个用于人形动画的扩展工具集。
由于骨骼结构的相似性,将动画从一个人形骨架映射到另一个人形骨架就称为可能,从而允许重新定位和反向运动学。除了少见的例外情况,类人生物模型可以具有相同的基本结构,连接的身体,头部和四肢代表了主要表达部分。 Mecanim系统充分利用了这一想法,简化了动画的装配和控制。创建动画的一个基本步骤是建立Mecanim所能理解的简化人形骨骼结构与骨骼动画中存在的实际骨骼之间的映射;在Mecanim术语中,这个映射叫做Avatar。本节中的页面说明如何为您的模型创建Avatar。
创建Avatar
当一个模型文件(FBX, COLLADA, 等格式)创建完成并且导入之后, 你可以在Rig面板指定它的导入类型。
人形动画
如果是人形结构,则选择”Humanoid”然后点击”Apply”. Mecanim将尝试将当前的模型骨骼结构匹配到Avatar骨骼结构. 大部分情况下, 这一步会通过内部分析两个骨骼结构之间的联系而自动完成。
如果匹配成功,你会看到在”Configure”菜单边上出现一个”√”标记。
此外,在成功匹配的情况下,将会添加一个Avatar子资源到模型资源中,您将能在project视图中看到它。
选择这个Avatar子资源,此时将在inspector面板出现一个”Configure Avatar”的按钮,点击这个按钮将会进入Avatar的配置模式。(如果模型被导入为Generic类型,虽然也会产生Avatar子资源,但是实际上它是不可以配置的,出现Avatar只是表明它是人形结构,可以连接到其它Avatar,用作皮肤)
如果Mecanim未能成功创建Avatar,您将在“Configure”按钮旁边看到一个”×”标记,并且不会添加Avatar子资源。 发生这种情况时,您需要手动配置Avatar。
非人形动画
Unity提供了另外两个选项:Generic(一般)和Legacy(旧版)。 一般动画使用Mecanim系统导入,但不能利用那些可用于人形动画的高级功能。 旧版动画使用Unity在Mecanim之前提供的动画系统。 在某些情况下,使用旧版动画仍然有用(最显着的是您不想完全更新的旧版项目),但新项目很少需要它们。 有关传统动画的更多详细信息,请参阅手册的”Legacy animation system”部分。
配置Avatar
由于“Avatar”是Mecanim系统的重要方面,也就需要您为模型配置合适的Avatar。 所以,无论自动创建Avatar失败还是成功,您都需要进入“Avatar配置”模式进行查看,以确保“Avatar”的有效和正确设置。 最重要的一点是,您的角色的骨骼结构需要与Mecanim的预定骨骼结构相匹配,并且该模型处于“T”形姿势。
如果Mecanim未能成功创建Avatar,您将在“Configure”按钮旁边看到一个”×”标记.
如果匹配成功,你会看到在”Configure”菜单边上出现一个”√”标记。
这里的成功匹配只是意味着所有必需的骨骼已经匹配,但为了得到更好的效果,您可能还需要匹配可选的骨骼,并将模型转换为适当的T形姿势。
当您进入配置(Configure)菜单时,编辑器将要求您保存场景。 原因是在配置模式下,场景视图用于单独显示所选模型的骨骼,肌肉和动画信息,而不显示场景的其余部分。
Once you have saved the scene, you will see a new Avatar Configuration inspector, with a bone mapping.
当你保存场景之后,inspector检视面板将出现用于骨骼映射的Avatar配置界面。
检视面板显示出哪些骨骼是必需的,哪些是可选的-可选的骨骼运动将由自动插值计算完成。 为了让Mecanim构建一个有效的匹配,你的模型骨架需要要包含所有的必需骨骼。为了提高与“Avatar”成功匹配的几率,请使用体现对应身体部位的方式命名您的骨骼。(例如“LeftArm”,“RightForearm”就比较合适)。
如果没能为模型建有效的匹配,您可以手动执行与Mecanim内部的内流程类似的过程:
- Sample Bind-pose(样本绑定,尝试让模型呈现更接近当初它被制作成模型时的姿态,那样的初始姿态比较容易被辨别)
- Automap(自动映射,从初始姿态创建一个骨骼映射)
- Enforce T-pose(强制T姿势,强制模型更接近T形姿势,这是Mecanim动画使用的默认姿势)
如果自动映射(Mapping-> Automap)完全或部分失败,您可以通过从场景或层次面板中拖拽骨骼来分配。 如果Mecanim认为骨骼适合,它会在头像检视面板中显示为绿色,否则显示为红色。
最后,如果骨骼分配正确,但角色的姿势不正确,您将看到“Character not in T-Pose”消息。 您可以尝试通过”Enforce T-Pose”来修复,或者对不正确的的那些骨骼进行旋转,最终呈现为T形姿势。
Avatar Body Masks 身体部位遮蔽
有时将动画限制在特定的身体部位是有用的。 例如,步行动画可能涉及角色手臂的摇摆,但如果他拿起枪,他应该把手臂端放在他面前。 您可以使用“Avatar Body Mask”(身体部位遮蔽)来指定应限制某个动画的角色的哪些部分 - 有关详细信息,请参”Avatar Body Mask”页面。
【Unity编程】Unity动画系统(一)