Unity Animation、Animator 的使用(超详细)
我创建的Unity、C#交流群,有兴趣可加入大家一起学习(现在人还很少,现在加入就是元老🙀):952914223。
本文转载于Unity Animation、Animator 的使用(超详细)
文章目录
0.写在前面的话
我创建的Unity、C#交流群,有兴趣可加入大家一起学习(现在人还很少,现在加入就是元老🙀):952914223
1. 添加动画
选中待提添加动画的物体, 在 Animation 窗口下
注意:如果选中的物体无Animation/Animator组件,会自动添加Animator组件。
2. Animation
2.1 制作界面

预览:启用/禁用场景预览模式。
录制:启用/禁用
}
==注意:==脚本和 animator 所在的对象所处同一对象
3. Animator
3.1 制作界面

3.2 一些参数解释
- Solo 和 Mute
当一个动画有多个后续动画时:
当该动画播放完后优先选择动作列表中最前(或者说最上的)的状态转移
Solo:当设置了某个 Transitions 为 Solo 时,那么优先选择标记 Solo 的动画转移
Mute:选择的状态转移被禁用 - Has Exit Time
是否有退出时间。简单理解:开启表示等待当前动画进行完才可进行下一个动画;关闭表示可以立即打断当前动画并播放下一个动画 - 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);
这里是一个专注于游戏开发的社区,我们致力于为广大游戏爱好者提供一个良好的学习和交流平台。我们的专区包含了各大流行引擎的技术博文,涵盖了从入门到进阶的各个阶段,无论你是初学者还是资深开发者,都能在这里找到适合自己的内容。除此之外,我们还会不定期举办游戏开发相关的活动,让大家更好地交流互动。加入我们,一起探索游戏开发的奥秘吧!
更多推荐



所有评论(0)