本文转载于Unity Animation、Animator 的使用(超详细)

0.写在前面的话

我创建的Unity、C#交流群,有兴趣可加入大家一起学习(现在人还很少,现在加入就是元老🙀):952914223

1. 添加动画

选中待提添加动画的物体, 在 Animation 窗口下
在这里插入图片描述注意:如果选中的物体无Animation/Animator组件,会自动添加Animator组件。
在这里插入图片描述

2. Animation

2.1 制作界面

在这里插入图片描述
在这里插入图片描述 预览:启用/禁用场景预览模式。

在这里插入图片描述 录制:启用/禁用

}

==注意:==脚本和 animator 所在的对象所处同一对象

3. Animator

3.1 制作界面

在这里插入图片描述

3.2 一些参数解释

  1. Solo 和 Mute
    当一个动画有多个后续动画时:
    在这里插入图片描述
    当该动画播放完后优先选择动作列表中最前(或者说最上的)的状态转移
    Solo:当设置了某个 Transitions 为 Solo 时,那么优先选择标记 Solo 的动画转移
    Mute:选择的状态转移被禁用
  2. Has Exit Time
    是否有退出时间。简单理解:开启表示等待当前动画进行完才可进行下一个动画;关闭表示可以立即打断当前动画并播放下一个动画
  3. Write Defaults
    在播放某一个动画Clip时,对于当前Clip没有涉及到的属性(而其他Clip修改过此属性),Write Defaults决定在播放该clip动画前是将其它属性是恢复“默认值”,还是延续此时此刻的值(被其他动画修改过的值)。
  • ✅ Write Defaults:使用默认值(即恢复初始状态)。
  • [ ] Write Defaults:使用上一个动画状态结束时的值(可能被修改过)。
    例子:
  • SmallToBig:将大小变成5倍。
  • RedToBlue:将颜色变红再变蓝。

如果[SmallToBig]不勾选Write Defaults,播放过[RedToBlue]后,[SmallToBig]再播放时是蓝色;勾选则是白色(即默认值)。
如果[RedToBlue]不勾选Write Defaults,播放过[SmallToBig]后,[RedToBlue]再次播放时使用5倍大小;勾选的话是使用原始大小(默认值)。

下面的三张图——两个动画均勾选了✅ Write Defaults,表现如下:
在这里插入图片描述
在这里插入图片描述

3.3 动画参数

在这里插入图片描述
在这里插入图片描述
代码控制:

public class AnimControl : MonoBehaviour
{
    private Animator anim;
    private void Start()
    {
        anim = this.GetComponent<Animator>();
    }

在这里插入图片描述

4. Animator中相关类、属性、API

4.1 类

AnimationClip: 动画片段,animation

属性/方法 含义
length 动画长度,单位为秒。(只读)
frameRate 对关键帧进行采样的帧率。(只读)
length / (1 / frameRate) 总帧率
AddEvent 将一个动画事件添加到该剪辑中

AnimatorStateInfo: 动画状态机状态信息

属性/方法 含义
fullPathHash 该状态的完整路径哈希
length 状态的当前持续时间
normalizedTime 整数部分为状态已循环的次数。小数部分为当前循环的进度百分比 (0-1)
speed 该动画的播放速度。1 表示正常播放速度

4.2 属性

属性 含义
speed 动画器的播放速度。1 为正常播放速度
runtimeAnimatorController.animationClips 返回所有动画 AnimationClip[]

4.3 API

方法名 含义
GetBool 返回给定布尔参数的值
GetFloat 返回给定 float 参数的值
GetInteger 返回给定整数参数的值
SetBool 设置给定布尔参数的值
SetFloat 将浮点值发送到动画器以影响过渡
SetInteger 设置给定整数参数的值
GetCurrentAnimatorClipInfo 返回给定层当前状态中所有 AnimatorClipInfo 的数组
GetCurrentAnimatorClipInfoCount 返回当前状态中 AnimatorClipInfo 的数量
GetCurrentAnimatorStateInfo 返回 AnimatorStateInfo,其中包含有关当前状态的信息
GetNextAnimatorClipInfo 返回给定层下一个状态中所有 AnimatorClipInfo 的数组
GetNextAnimatorClipInfoCount 返回下一个状态中 AnimatorClipInfo 的数量
GetNextAnimatorStateInfo 返回 AnimatorStateInfo,其中包含有关下一个状态的信息
Play 播放一个状态

4.4 几个关键方法

Animator.Play

void Play(string stateName, int layer = -1, float normalizedTime = float.NegativeInfinity);

  
AI生成项目 csharp
运行
  • 1
Parameters 参数 Description 描述
stateName 将要播放的动画状态名字。
layer 动画状态所在的层。
normalizedTime 将要播放动画状态的归一化时间(0-1,时间比例值)。

5. 动画播放和暂停控制

1. Animotor

// 播放
animator.Play("ani_name");
// 暂停
animator.speed = 0;
// 继续播放
animator.speed = 1;
//  重置到起始帧
animator.Play("ani_name", 0, 0f);

  
Logo

这里是一个专注于游戏开发的社区,我们致力于为广大游戏爱好者提供一个良好的学习和交流平台。我们的专区包含了各大流行引擎的技术博文,涵盖了从入门到进阶的各个阶段,无论你是初学者还是资深开发者,都能在这里找到适合自己的内容。除此之外,我们还会不定期举办游戏开发相关的活动,让大家更好地交流互动。加入我们,一起探索游戏开发的奥秘吧!

更多推荐