Skip to content

Animation Clip

unity-animation-clip-deep-dive

一句话理解

Animation Clip 就是 Unity 里“一个动作片段”。

比如:

c
Idle.anim      待机
Run.anim       跑步
Jump.anim      跳跃
Attack.anim    攻击
OpenDoor.anim  开门

它本质上记录的是:

c
在第 0 秒,某个属性是什么值
在第 0.2 秒,某个属性是什么值
在第 0.5 秒,某个属性是什么值

Unity 再根据这些关键帧自动补中间过程。

Clip 里面有什么

一个 Animation Clip 主要包含:

c
Keyframes:关键帧
Curves:曲线
Animated Properties:被动画控制的属性
Events:动画事件
Loop 设置:是否循环

它可以控制很多东西:

c
Transform.position
Transform.rotation
Transform.scale
SpriteRenderer.sprite
SpriteRenderer.color
UI Image 颜色
Light 强度
材质参数
脚本里的公开字段

所以 Animation Clip 不只给角色用。门打开、按钮缩放、金币旋转、UI 淡入,都可以用 Clip。

怎么创建 Animation Clip

最普通流程:

c
1. 选中场景里的 GameObject
2. 打开 Window > Animation > Animation
3. 点击 Create
4. 保存,比如 Run.anim
5. 点击红色录制按钮
6. 拖动时间轴
7. 改物体属性
8. Unity 自动生成关键帧

创建第一个 Clip 时,Unity 通常会自动帮你做几件事:

c
创建 .anim 文件
创建 Animator Controller
给物体添加 Animator 组件
把 Clip 放进 Controller 里作为状态

2D 逐帧动画

2D 角色跑步常见是多张 Sprite:

c
Run_0
Run_1
Run_2
Run_3
Run_4

把这些 Sprite 按顺序拖到场景或 Animation 窗口里,Unity 可以生成一个 Run.anim。这个 Clip 记录的是:

c
0 帧显示 Run_0
1 帧显示 Run_1
2 帧显示 Run_2
...

如果是待机、跑步这种循环动作,要打开:

c
Loop Time

Clip 和 Animator Controller 的区别

这个非常重要:

c
Animation Clip:动作内容
Animator Controller:动作切换规则
Animator State:正在播放某个 Clip 的状态
Animator Component:挂在物体上,真正播放动画

比如:

c
Run.anim 是动作数据
Run State 是 Animator 里的状态
Idle -> Run 的 Transition 决定什么时候切过去
Animator 组件负责在角色身上播放

所以 Clip 自己不是完整动画系统,它通常要放进 Animator Controller 里用。

Animation Event

Animation Event 可以在动画某一帧调用函数。

比如攻击动画:

c
挥刀开始
刀到敌人身上
收刀

真正造成伤害应该放在“刀到敌人身上”的那一帧。

c
public void AttackHit()
{
    Debug.Log("造成伤害");
}

然后在 Attack.anim 的命中帧加 Animation Event,调用 AttackHit()

适合:

c
脚步声
攻击命中
发射子弹
播放特效
开门音效

代码怎么控制 Clip

新手不要直接想着“播放某个 Clip 文件”,更常见做法是控制 Animator 参数:

c
animator.SetFloat("Speed", speed);
animator.SetTrigger("Attack");
animator.SetBool("IsGrounded", isGrounded);

如果确实要直接播放某个状态,可以:

c
animator.Play("Attack");

或者更柔和地切换:

c
animator.CrossFade("Run", 0.15f);

注意这里传的是 Animator 里的状态名,不一定是 .anim 文件名。

常见错误

c
有 .anim 文件,但物体没挂 Animator
Clip 没放进 Animator Controller
忘记勾 Loop Time,跑步只播一次
攻击动画也勾了 Loop Time,结果一直攻击
参数名字拼错,动画不切换
Animation Event 函数名写错
Clip 控制了位置,代码也控制位置,二者打架

记住这句:

c
Animation Clip 是动作数据;Animator Controller 决定什么时候播放它。

参考:Unity 官方 Animation Clip创建 Animation ClipAnimation WindowAnimation Events

文章评价

读完这篇,留下你的看法

暂无审核通过的评价。

登录账号后才能评价。

本站访客数0总站访问量0本页访问量0