Unity中的动画系统

学习动画系统过程中的一些笔记

概述

Unity 的动画系统基于动画剪辑(Animation Clips)的概念,每个动画剪辑可以被认为是一个单一的线性记录,由动画状态机(Animator Controller)将一个个线性记录组成类似结构化流程图的系统。动画状态机可以跟踪当前正在播放的动画剪辑,以及当动画剪辑应该改变或混合在一起时的状态信息。

Unity动画组件

Animator

Animator组件用于将动画分配给场景中的GameObject。面板及各项参数说明如下:

参数说明
Controller添加在当前角色上的 Animator 控制器
Avatar当前角色的 Avatar 系统(如果这个 Animator 使用人物角色)
Apply Root Motion从动画本身或从脚本控制角色的位置和旋转
Update Mode动画的更新模式
-Normal正常模式,与 Update 更新同步。动画的速度匹配当前的时间缩放,如果时间缩放放缓,动画也会放慢速度
-Animate Physics动画与 Fixed Update 更新同步(即随同物理系统)。如果动画的物体与物理相互作用,用户应该使用该模式
-Unscaled Time更新动画与 Update 更新同步,但动画的速度忽略时间的缩放
Culling Mode动画的裁剪模式
-Always Animate动画一直会更新,不会裁剪
-Cull Update Transforms动画的 Transforms 重定向、IK 和修改转换在渲染器不可见时被禁用
-Cull Completely当动画对象的渲染器不可见时完全禁用(即不可见时停止播放动画)

Layer

Unity 使用“Layer”(动画层)来管理身体不同部位的复杂状态机。比如用户可以使用下半身动画层来管理走动 、 跑动动作;使用上半身动画层来控制投掷 、射击动作。

动画层面板各项参数说明如下:

参数说明
Weight代表当前层的权重。比如基础层(权重固定为1)人物的手为下垂状态,第二层人物的手为举起状态,权重设为0.5,则会产生人物的手举在半空的状态
Mask遮罩。可以通过创建遮罩来屏蔽当前层影响的关节
BlendingOverride(覆盖)意味着来自其他图层的信息将被忽略;Additive(附加)意味着动画将被添加到以前的图层之上
Sync同步层。开启后可以指定一个层使当前层的所有状态同步,不可编辑但可以替换动画。可以用来做负伤动画(动画不同但状态相同)
Timing开启Sync后才能启用。启用后,同步层可以控制被同步层的持续时间
IK Pass开启后脚本才能控制IK

Parameters

Parameters面板可以添加如下类型的参数,这些参数可以通过脚本控制,并以此来控制动画状态之间的切换。

在脚本中可以通过如下方式控制参数。

Animator Controller

动画控制器对其中使用的动画片段进行了引用,并使用所谓的状态机管理各种动画状态和它们之间的转换。

动画状态

动画状态是动画状态机中内建的基本模块。

检视面板中的各项参数说明如下:

参数说明
Motion这个状态的动画片段
Speed动画的默认速度
-Multiplier速度的乘数
Parameter是否在运行时使用动画控制器的参数调整此属性,即使用Parameters控制这个属性
Motion Time动画播放时长
Mirror是否将动画镜像
Cycle Offset周期偏移。即从动画的哪一个位置开始播放
Foot IK是否在这个动作中使用脚部IK动画
Write Defaults是否对没有动画的属性写回默认值
Transitions从这个状态产生的状态转移
Animation Transition

动画过渡,用来控制各个状态之间的切换。

检视面板中的各项参数说明如下:

参数说明
Has Exit Time是否等动画结束后切换
Exit Time退出当前状态的时间
Fiexd Duration如果勾选,则转换持续时间以秒为单位;反之,以%为单位
Transition Duration转换时间
Transition Offset在转换到的目的状态过程中开始播放的时间的偏移量
Interruption Source使用它来控制这种转换可能被中断的情况
Ordered Interruption确定当前转换是否可以独立于其顺序中的其他转换中断
Conditions决定该动画过渡在何时被触发

Animation

Unity中用于编辑物体动画的系统,总体上与视频剪辑类似,不再过多赘述。

从外部导入动画资源

Unity 可以导入原生的 Maya 文件(.mb 或者 .ma)、3ds Max(.max)、Cinema 4D 文件(.c4d)以及一般的 FBX 文件。

导入的模型可以通过Rig面板进行骨骼绑定

检视面板中的各项参数说明如下:

参数说明
Animation Type动画类型。
-Legacy传统的动画类型,如果设置为这种类型,模型下会自动生成一个Animation文件,同时游戏物体上会自动挂载Animation组件。这种方式无法通过状态机控制动画
-Generic通用的动画类型,如果设置为这种类型,需要创建骨骼映射,模型下自动生成Avatar文件,游戏物体会自动挂载Animator组件
-Humanoid人型动画类型,如果设置为这种类型,可以进行动画重定向(将一组动画应用到不同的人型角色上),同时该类型可以通过动画直接控制游戏物体的移动
Avatar DefinitionAvatar定义,可以选择从当前模型创建,也可以选择复用其他模型的Avatar
Skin Weights影响给定顶点的最大骨骼数量,默认为4个,可以自定义
Optimize Game Objects优化游戏物体,勾选后可以提高性能

点击Configure按钮可以进入骨骼编辑界面:

在Animation界面可以对动画片段进行剪切、设定循环、轴向锁定等设置。

IK动画

IK动画即逆向运动学功能。它可以通过给定的末端节点位置,逆推出节点链上所有其他节点的合理位置。例如希望角色的手臂触碰一个固定的物体,或脚站立在不平坦的路面上等。
常用的设置IK动画的方法如下:

分别是设置IK的位置、旋转、位置权重、旋转权重。

MatchTarget

MatchTarget方法可以提高动画的匹配度,比如人物进行翻墙动作时,原动画的手部可能并没有接触到墙壁,通过这个方法可以很好地解决。

动画混合

在状态机界面通过Create State From New Blend Tree创建一个混合树。

1D混合

2D混合

2D混合树就是通过控制两个变量进行状态间的混合。

2D混合树分为如下几种类型:

第一种适用于没有相同方向的动画混合;
第二种适用于有相同方向的动画,需要有一个(0,0)的原点;
第三种适用于两个参数类型不同的动画,如角速度和线速度。

Direct混合

将动画参数直接映射到子混合树的权重,适用于脸部动画的混合。

  • 7
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值