【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 使用有更多问题,欢迎评论交流!

相关推荐
聪明的笨猪猪1 小时前
Java JVM “内存(1)”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
_dindong1 小时前
Linux网络编程:Socket编程TCP
linux·服务器·网络·笔记·学习·tcp/ip
AA陈超2 小时前
虚幻引擎5 GAS开发俯视角RPG游戏 P05-11 消息小部件
c++·游戏·ue5·游戏引擎·虚幻
摇滚侠2 小时前
Spring Boot 3零基础教程,WEB 开发 Thymeleaf 属性优先级 行内写法 变量选择 笔记42
java·spring boot·笔记
摇滚侠2 小时前
Spring Boot 3零基础教程,WEB 开发 Thymeleaf 总结 热部署 常用配置 笔记44
java·spring boot·笔记
rechol3 小时前
汇编与底层编程笔记
汇编·arm开发·笔记
AA陈超3 小时前
虚幻引擎5 GAS开发俯视角RPG游戏 P06-09 玩家等级与战斗接口
c++·游戏·ue5·游戏引擎·虚幻
lzj_pxxw4 小时前
嵌入式开发技巧:舍弃标志位,用宏定义函数实现程序单次运行
笔记·stm32·单片机·嵌入式硬件·学习
润 下4 小时前
C语言——回调函数的典型示例(分析详解)
c语言·开发语言·人工智能·经验分享·笔记·程序人生
朝新_4 小时前
【EE初阶 - 网络原理】传输层协议
java·开发语言·网络·笔记·javaee