序
本文主要介绍Unity中的动画系统,包括但不限于Animator组件、AnimationController以及相关控制脚本。
本文参考于iHeartGameDev的系列教程视频
Animator
Animator是一个Unity内置组件,挂载在需要执行动画的对象身上
Update Mode
Normal:在Update()
周期内更新动画
Fixed:在FixedUpdate()
周期内更新动画,与物理系统同步(不影响物理)
Unscaled Time:不受Time.timeScale
影响,适合UI
Culling Mode
Always Animate:任何情况下都会持续计算
Cull Update Transforms:不计算骨骼动画、transform、ik等运动,但状态机和Root Motion持续运作
Cull Completely:完全停止动画
Animator Controller
Layers 动画层
Parameters 参数组(变量)
使用案例
Float 使用场景
移动速度控制动画混合(如从站立过渡到跑步)
animator.SetFloat("Speed", moveSpeed);
Int 使用场景
控制角色当前姿态类型,例如:0=正常,1=战斗,2=防御
animator.SetInteger("State", 1);
Bool 使用场景
控制持续性状态,如“是否在地面”、“是否开火”
animator.SetBool("IsJumping", true);
Trigger 使用场景
控制一次性动画,如“攻击动作”或“受伤反应”
animator.SetTrigger("Attack");
animator.ResetTrigger("Attack");
状态机
三个特殊节点
注:
Any State是单向的,要考虑进入后退出的状态转换
每个Entry都必须设置一个默认状态
Transition 转移
Solo和Mute
Solo:当有多个转移满足时,只通过勾选Solo的转移
Mute:禁止勾选Mute的转移
Has Exit Time
表示动画是否要播放到一定程度才能切换。
如果勾选:动画播放到一定百分比(Exit Time)后,才开始切换。
如果不勾选:只要满足条件,就立即切换。
Exit Time
定义动画播放到多少才开始切换(仅在 Has Exit Time 被勾选时生效)。
范围是 0 ~ 1,表示动画播放百分比。
例如
0.75
表示动画播放到 75% 时触发切换。
Fixed Duration
控制过渡时间是按“秒数”计算,还是按动画的相对时间比例计算。
Transition Duration
切换花费的时间(单位是原状态动画的时间比例)
通常是 0.1 ~ 0.25,表示从一个状态混合到另一个状态的过渡时间。
Transition Offset
设置目标动画从哪里开始播放(0~1)
例如设置为 0.5 表示新动画从一半开始播放。
Interruption Source
Conditions
定义在什么情况下才允许进行过渡。
条件由你在 Parameters 中定义的参数控制(Float、Bool、Trigger 等)。
多个条件之间是“与”关系。
Blend Tree 混合树
Blend Tree
是 Animator Controller 中的一种特殊状态(State),它允许你基于一个或多个参数来动态混合多个动画,实现平滑自然的动画过渡。
Blend Type
动作重定向
动作重定向的本质
所有类人生物模型,只要其骨骼可以映射到 Unity 的标准 Humanoid Avatar 上,就可以共享所有基于 Humanoid 的动画。这种“重定向”是基于“抽象骨架结构”的动作转译系统,是一种标准化、接口化的动画解决方案。
只要某一角色的动作剪辑基于Humanoid,该角色的所有动作就成为 Unity 标准人形动作,可以无缝重定向到任意其他 Humanoid 角色。
角色重定向方法
导入角色FBX
将
Animation Type
设置为 Humanoid设置
Avatar Definition
为:Create From This Model点击
Apply
点击
Configure
进入骨骼映射映射完成后点击 Done
动作重定向方法
与上文角色重定向方法类似
设置
Avatar Definition
为:Copy From Other Avatar设置
Source
为:已经重定向完成的角色Avatar