【Unity笔记】Unity Animation组件使用详解:Play方法重载与动画播放控制

Unity Animation组件使用详解:Play方法重载与动画播放控制

本文将深入解析 Unity 中 Animation 组件的使用方式,重点梳理 Play() 方法的多种重载形式及其使用场景,结合 PlantUML 图示帮助你快速掌握动画控制逻辑。适用于处理较简单的播放需求,如 UI 动效、物体旋转、小动画等,不涉及 Animator 控制器。


文章目录

  • [Unity Animation组件使用详解:Play方法重载与动画播放控制](#Unity Animation组件使用详解:Play方法重载与动画播放控制)
    • [1. Animation组件基础概念](#1. Animation组件基础概念)
    • [2. Animation.Play() 方法重载一览](#2. Animation.Play() 方法重载一览)
    • [3. Play重载方法解析与使用场景](#3. Play重载方法解析与使用场景)
      • [`Play(string animation, PlayMode mode)`](#Play(string animation, PlayMode mode))
      • [`Play(string animation)`](#Play(string animation))
      • [`Play(PlayMode mode)`](#Play(PlayMode mode))
      • `Play()`
    • [4. 已废弃重载方法说明](#4. 已废弃重载方法说明)
    • [5. PlayMode 枚举说明](#5. PlayMode 枚举说明)
    • [6. 示例:按空格播放动画](#6. 示例:按空格播放动画)
    • [7. 常用 API 总结](#7. 常用 API 总结)
    • [8. PlantUML 动画播放逻辑图](#8. PlantUML 动画播放逻辑图)
    • [9. 实践建议与常见误区](#9. 实践建议与常见误区)
    • [10. 延伸阅读:AnimationClip 动态创建与事件系统](#10. 延伸阅读:AnimationClip 动态创建与事件系统)
    • [11. 总结与展望](#11. 总结与展望)

1. Animation组件基础概念

在 Unity 中,Animation 是早期提供的动画播放组件,适用于不需要状态机控制、过渡或混合动画的简易动画场景。

添加方式

  1. 选中 GameObject
  2. 菜单:Component > Miscellaneous > Animation
  3. 拖入 .anim 文件到 Animation 的 Clips 列表中

Animator 不同,Animation 的控制完全依赖于代码或组件面板的剪辑顺序,适合以下场景:

  • UI 控件简单缩放/位移动画
  • NPC 简单行为动画(如挥手)
  • 工具逻辑演示动画(编辑器动画)

2. Animation.Play() 方法重载一览

Unity 提供了多种 Play() 方法,用于满足不同控制需求。其函数声明如下:

csharp 复制代码
public bool Play(string animation, PlayMode mode); // ✅推荐
public bool Play(string animation);                // ✅推荐
public bool Play(PlayMode mode);                   // ✅推荐
public bool Play();                                // ✅推荐

// 以下为已废弃方法 ❌ 不建议再用
[Obsolete] public bool Play(AnimationPlayMode mode);
[Obsolete] public bool Play(string animation, AnimationPlayMode mode);

3. Play重载方法解析与使用场景

Play(string animation, PlayMode mode)

播放指定名称动画,带播放模式设置:

csharp 复制代码
animation.Play("run", PlayMode.StopSameLayer);
  • animation: 动画剪辑名
  • mode: PlayMode.StopSameLayer(推荐)或 PlayMode.StopAll

适合:同一 GameObject 上有多个动画剪辑,避免动画间干扰。

Play(string animation)

播放指定动画,使用默认模式 StopSameLayer

csharp 复制代码
animation.Play("walk");

等价于:

csharp 复制代码
animation.Play("walk", PlayMode.StopSameLayer);

Play(PlayMode mode)

播放默认绑定的 Animation.clip,设置播放模式:

csharp 复制代码
animation.Play(PlayMode.StopAll);

Play()

播放默认绑定的 Animation.clip,默认模式 StopSameLayer

csharp 复制代码
animation.Play();

4. 已废弃重载方法说明

早期 Unity 使用 AnimationPlayMode 枚举控制播放模式,后续被 PlayMode 替代。以下方法现已标记为 Obsolete

csharp 复制代码
[Obsolete] public bool Play(AnimationPlayMode mode);
[Obsolete] public bool Play(string animation, AnimationPlayMode mode);

建议 :迁移至对应 PlayMode 重载方法,避免未来版本升级问题。


5. PlayMode 枚举说明

csharp 复制代码
public enum PlayMode {
    StopSameLayer, // 停止同层级动画,保持其他层级不变(推荐)
    StopAll        // 停止所有动画后播放
}

使用建议

用法示例 说明
Play("run") 播放 run 动画
Play("jump", PlayMode.StopAll) 播放 jump 动画并停止所有动画
Play(PlayMode.StopSameLayer) 播放默认动画 clip

6. 示例:按空格播放动画

以下示例脚本展示如何通过空格键触发动画播放:

csharp 复制代码
using UnityEngine;

public class AnimationPlayer : MonoBehaviour {
    private Animation anim;

    void Start() {
        anim = GetComponent<Animation>();
    }

    void Update() {
        if (Input.GetKeyDown(KeyCode.Space)) {
            if (!anim.isPlaying) {
                anim.Play("jump", PlayMode.StopAll);
            }
        }
    }
}

7. 常用 API 总结

API 方法 功能说明
Play() 播放默认动画
Play("run") 播放指定动画
Stop() 停止所有动画播放
isPlaying 判断是否在播放动画
anim["walk"].speed = 2f 设置播放速度
anim["walk"].wrapMode = WrapMode.Loop 设置循环模式

8. PlantUML 动画播放逻辑图

plantuml 复制代码
@startuml
class Animation {
    +Play()
    +Play(string animation)
    +Play(PlayMode mode)
    +Play(string animation, PlayMode mode)
    -Play(AnimationPlayMode mode)
    -Play(string animation, AnimationPlayMode mode)
}

enum PlayMode {
    StopSameLayer
    StopAll
}

Animation --> PlayMode : 播放控制参数
@enduml

该图展示了 Animation 类中的方法重载与推荐使用方向。


9. 实践建议与常见误区

类别 项目 内容
✅ 建议 命名规范 动画名避免使用中文或空格
✅ 建议 动画复用 同一剪辑可在多个对象间复用,提高效率
✅ 建议 播放优化 检查 isPlaying 防止重复播放
❌ 误区 动画混合 Animation 不支持动画混合或过渡
❌ 误区 状态管理 不建议使用 Animation 实现复杂状态机

10. 延伸阅读:AnimationClip 动态创建与事件系统

你可以通过代码动态生成 AnimationClip 并添加到 Animation 上,实现运行时动画注入:

csharp 复制代码
AnimationClip clip = new AnimationClip();
clip.legacy = true;

AnimationCurve curve = AnimationCurve.Linear(0f, 0f, 1f, 90f);
clip.SetCurve("", typeof(Transform), "localEulerAngles.y", curve);

animation.AddClip(clip, "rotateY");
animation.Play("rotateY");

也可以使用 AnimationEvent 添加事件回调:

csharp 复制代码
AnimationEvent evt = new AnimationEvent();
evt.functionName = "OnAnimEvent";
evt.time = 0.5f;
clip.AddEvent(evt);

11. 总结与展望

Animation 是 Unity 提供的轻量动画控制方式,适用于对性能要求高、动画结构简单的场景。

适用场景:

  • 简单交互反馈动画(按钮闪烁、旋转)
  • 工具编辑器动画预览
  • 模拟演示项目中快速开发动画逻辑

未来扩展方向:

  • 动态生成动画轨迹(位置、旋转、透明度)
  • AnimationClip 自动管理与加载系统
  • Unity Timeline 或 Playables API 的衔接与迁移

📌 如果你对 Animation 使用有更多问题,欢迎评论交流!

相关推荐
LuLaLuLaLeLLLLLL20 分钟前
MySQL 调优笔记
笔记·mysql·adb
被一米六支配的恐惧33 分钟前
使用argocd部署nginx
笔记
桂?37 分钟前
在 CentOS中安装Docker并安装青龙脚本——笔记
笔记·docker·centos
mitt_1 小时前
《开窍》读书笔记8
笔记
wb1898 小时前
流编辑器sed
运维·笔记·ubuntu·云计算
嵌入式@秋刀鱼10 小时前
《第四章-筋骨淬炼》 C++修炼生涯笔记(基础篇)数组与函数
开发语言·数据结构·c++·笔记·算法·链表·visual studio code
嵌入式@秋刀鱼10 小时前
《第五章-心法进阶》 C++修炼生涯笔记(基础篇)指针与结构体⭐⭐⭐⭐⭐
c语言·开发语言·数据结构·c++·笔记·算法·visual studio code
m0_6786933311 小时前
深度学习笔记26-天气预测(Tensorflow)
笔记·深度学习·tensorflow
桂?11 小时前
使用离线依赖解决Android Studio编译报错(下载不了jar)——笔记
笔记·android studio·jar