Unity 动画系统
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/unity-animation-ci7v。
技能介绍
你要解决什么问题
角色动画一旦进入“多个动作之间怎么切”的阶段,直接在代码里播放 Clip 很快就会失控:跳跃触发一次却没反应、角色明明该跑却在走、上半身瞄准覆盖了全身、脚踩地时轻微滑步。问题不在动画文件本身,而在缺一套统一的状态机驱动机制——什么时候允许切换、由什么参数驱动、上下层动画如何混合。
这个技能针对的就是这套机制,基于 Unity 6 的 Animator / Mecanim 工作,覆盖 *.controller 与 *.anim 资产,以及带 Humanoid Avatar 的骨骼模型。
它如何工作
核心思路:参数驱动状态,状态机负责过渡,代码只负责更新参数,不直接干预状态。
- 控制器配置:给模型挂上
Animator并分配 Animator Controller;Humanoid 模型的 Rig 设为 Humanoid,以便生成 Avatar,从而支持重定向与 IK。 - 参数与状态:在控制器上定义
Float(Speed)、Bool(IsGrounded)、Int、Trigger(Jump)等参数,再由各状态之间的过渡条件读取这些参数。 - 脚本驱动:通过
SetFloat、SetBool、SetInteger、SetTrigger更新参数,交给状态机解析过渡,而不是硬切状态。 - 混合树:用
Blend Tree把一个 Float 参数映射到待机→行走→奔跑的连续混合,避免为每种速度组合维护一堆离散状态。 - 分层与覆盖:用 Layer 加
Avatar Mask叠加或覆盖上半身动作,再调layerWeight控制权重。 - 验证:在 Play 模式下打开 Animator 窗口,实时状态高亮与参数变化会直接告诉你哪条过渡被触发、哪条没有。
适用边界与注意点
它适合 Animator Controller 与 *.anim 资产驱动的状态机动画,以及 Humanoid 骨骼的 IK 配置。
不太适合的场合:UI 淡入淡出、位置插值这类简单补间,交给 tween 或协程即可;Timeline 过场动画是独立工具;2D Sprite 帧动画虽可走 Animator,但本质是 Sprite 关键帧而非这套状态机逻辑。
容易踩的坑包括:Trigger 被下一次满足条件的过渡消费并自动重置,没被消费时会“粘住”到之后突然触发,需要 ResetTrigger 清理或改用 Bool;参数名拼写错误不会报错只是静默失效,应使用 Animator.StringToHash 缓存哈希;过渡感觉迟钝,多半是 Has Exit Time 还在等当前片段播完,响应型过渡(跳跃、受击)应取消勾选;角色滑步或无法移动,通常是 Root Motion 与脚本移动 transform 同时生效,只能二选一;上半身图层覆盖全身,需要确认 Blend mode(Override / Additive)、Avatar Mask 和 layerWeight 都正确设置;IK 没生效,则要确认在 OnAnimatorIK 中编写、图层启用了 IK Pass,且模型是 Humanoid Avatar。
使用场景
- 把角色待机、行走、奔跑和跳跃剪影接进状态机,用 Speed 与 IsGrounded 参数驱动过渡
- 为第一人称角色配置上半身瞄准层,用 Avatar Mask 让手部动作叠加在移动之上
- 用 Blend Tree 让角色按一个速度参数在待机、行走与奔跑间平滑混合
- 给 Humanoid 角色实现足部 IK,让脚掌贴合斜坡与台阶,并在 OnAnimatorIK 中处理权重
适合人员
- 负责角色动画状态切换的 Unity 客户端程序员,需要把脚本参数接到 Animator Controller
- 维护第三人称动作系统的技术美术,需要处理分层、Avatar Mask 与混合权重
- 实现 Humanoid 重定向与足部 IK 的动画程序,需要在 OnAnimatorIK 中落地骨骼约束
- 排查 Trigger 未消费、过渡延迟或 Root Motion 冲突的 Unity 开发者,需要定位动画状态机问题