2.Playable播放单个动画剪辑
2.1 知识点
直接播放单个动画剪辑
思路和步骤
Playable API 直接播放单个动画的思路很清晰:建图 → 把 Clip 变成节点 → 接到输出 → 播放。
核心步骤:
创建 PlayableGraph
PlayableGraph.Create()创建图,这是所有节点的容器。设置时间更新模式
SetTimeUpdateMode()指定更新方式,常用DirectorUpdateMode.GameTime跟随游戏时间。创建动画输出
AnimationPlayableOutput.Create()创建输出节点并绑定场景中的Animator,负责把结果真正写回角色。创建动画剪辑节点
AnimationClipPlayable.Create()把AnimationClip包装成可播放节点。连接节点到输出
SetSourcePlayable()把剪辑节点接到输出。播放图
graph.Play()开始播放。清理资源
组件禁用或退出时graph.Destroy()释放资源(不要省略)。脚本挂到 GameObject 并关联 Clip

关键组件说明:
AnimationClipPlayable
Playable 系统中的叶子节点,用于封装单个动画剪辑。内部持有AnimationClip,每帧根据时间采样动画数据,可控制速度、时间偏移等参数。AnimationPlayableOutput
图的出口节点,把 PlayableGraph 的结果输出到场景对象。必须绑定Animator,用SetSourcePlayable()指定输入源,可设置输出权重控制混合强度。
优点:链路清晰,方便理解 Graph 的构成与控制点,适合后续做自定义扩展。
缺点:步骤多、代码偏长,需要自己管理图的创建与销毁。
代码实现
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Animations;
/// <summary>
/// 使用 Playable API 播放动画的示例组件
/// 该组件演示了如何通过 PlayableGraph 来播放单个动画剪辑
/// </summary>
[RequireComponent(typeof(Animator))]
public class PlayAnimationSample : MonoBehaviour
{
/// <summary>
/// 要播放的动画剪辑
/// </summary>
public AnimationClip animationClip;
/// <summary>
/// Playable 图,用于管理动画播放流程
/// </summary>
PlayableGraph playableGraph;
/// <summary>
/// 初始化并开始播放动画
/// </summary>
void Start()
{
// 创建 Playable 图
playableGraph = PlayableGraph.Create();
// 设置时间更新模式为游戏时间
playableGraph.SetTimeUpdateMode(DirectorUpdateMode.GameTime);
// 创建动画输出,连接到 Animator 组件
var playableOutput = AnimationPlayableOutput.Create(playableGraph, "VayneAnimationOutput", GetComponent<Animator>());
// 将动画剪辑包裹在可播放项中
var clipPlayable = AnimationClipPlayable.Create(playableGraph, animationClip);
// 将可播放项连接到输出
playableOutput.SetSourcePlayable(clipPlayable);
// 播放该图
playableGraph.Play();
}
/// <summary>
/// 组件禁用时清理资源,销毁 Playable 图及其所有可播放项和输出
/// </summary>
void OnDisable()
{
// 销毁该图创建的所有可播放项和 PlayableOutput
playableGraph.Destroy();
}
}
代码说明:
PlayableGraph.Create():创建图。SetTimeUpdateMode(DirectorUpdateMode.GameTime):设置按游戏时间更新。AnimationPlayableOutput.Create():创建输出节点,绑定目标Animator。AnimationClipPlayable.Create():把AnimationClip变成可播放节点。SetSourcePlayable():把剪辑节点接到输出。Play():开始播放。Destroy():释放图和节点。建议放在OnDisable(),确保组件禁用时就能回收。
效果展示

这里给 AnimationPlayableOutput.Create() 传了 VayneAnimationOutput,只是为了在 Visualizer 里更好辨认:

使用工具类快速播放动画剪辑
思路和步骤
Unity 提供了更省事的工具方法:AnimationPlayableUtilities.PlayClip(),一行代码把图搭好并播放。
工具方法内部会自动完成:
- 创建
PlayableGraph - 设置时间更新模式为
DirectorUpdateMode.GameTime - 创建
AnimationPlayableOutput并绑定 Animator - 创建
AnimationClipPlayable并连接到输出 - 调用
Play()开始播放
使用步骤:
- 调用
AnimationPlayableUtilities.PlayClip(Animator, AnimationClip, out PlayableGraph)。 - 通过
out拿到图引用,便于后续Destroy()。
优点:代码短,适合快速验证和原型。
缺点:中间步骤被封装,扩展点少。
适用场景:快速播放单个剪辑、只需要出效果的场景。
代码实现
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Animations;
/// <summary>
/// 使用 Playable Utilities 播放动画的简易示例组件
/// 该组件演示了如何使用 AnimationPlayableUtilities.PlayClip 简化动画播放流程
/// 相比手动创建 PlayableGraph,这种方式更加简洁高效
/// </summary>
[RequireComponent(typeof(Animator))]
public class PlayAnimationUtilitiesSample : MonoBehaviour
{
/// <summary>
/// 要播放的动画剪辑
/// </summary>
public AnimationClip animationClip;
/// <summary>
/// Playable 图,用于管理动画播放流程
/// 由 AnimationPlayableUtilities.PlayClip 自动创建和管理
/// </summary>
PlayableGraph playableGraph;
/// <summary>
/// 初始化并开始播放动画
/// 使用 AnimationPlayableUtilities.PlayClip 一键完成图创建、连接和播放
/// </summary>
void Start()
{
// 使用工具方法一键创建并播放动画,自动处理所有配置
AnimationPlayableUtilities.PlayClip(GetComponent<Animator>(), animationClip, out playableGraph);
}
/// <summary>
/// 组件禁用时清理资源,销毁 Playable 图及其所有可播放项和输出
/// </summary>
void OnDisable()
{
// 销毁该图创建的所有可播放项和输出
playableGraph.Destroy();
}
}
代码说明:
AnimationPlayableUtilities.PlayClip():一行完成创建与播放。out playableGraph:返回创建的图,便于管理。- 工具类不会帮你销毁图,
Destroy()仍需手动调用。
效果展示

用 AnimationPlayableUtilities 这版没有传输出名,Visualizer 里默认显示为 AnimationClip:

2.2 知识点代码
PlayAnimationSample.cs
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Animations;
/// <summary>
/// 使用 Playable API 播放动画的示例组件
/// 该组件演示了如何通过 PlayableGraph 来播放单个动画剪辑
/// </summary>
[RequireComponent(typeof(Animator))]
public class PlayAnimationSample : MonoBehaviour
{
/// <summary>
/// 要播放的动画剪辑
/// </summary>
public AnimationClip animationClip;
/// <summary>
/// Playable 图,用于管理动画播放流程
/// </summary>
PlayableGraph playableGraph;
/// <summary>
/// 初始化并开始播放动画
/// </summary>
void Start()
{
// 创建 Playable 图
playableGraph = PlayableGraph.Create();
// 设置时间更新模式为游戏时间
playableGraph.SetTimeUpdateMode(DirectorUpdateMode.GameTime);
// 创建动画输出,连接到 Animator 组件
var playableOutput = AnimationPlayableOutput.Create(playableGraph, "VayneAnimationOutput", GetComponent<Animator>());
// 将动画剪辑包裹在可播放项中
var clipPlayable = AnimationClipPlayable.Create(playableGraph, animationClip);
// 将可播放项连接到输出
playableOutput.SetSourcePlayable(clipPlayable);
// 播放该图
playableGraph.Play();
}
/// <summary>
/// 组件禁用时清理资源,销毁 Playable 图及其所有可播放项和输出
/// </summary>
void OnDisable()
{
// 销毁该图创建的所有可播放项和 PlayableOutput
playableGraph.Destroy();
}
}
PlayAnimationUtilitiesSample.cs
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Animations;
/// <summary>
/// 使用 Playable Utilities 播放动画的简易示例组件
/// 该组件演示了如何使用 AnimationPlayableUtilities.PlayClip 简化动画播放流程
/// 相比手动创建 PlayableGraph,这种方式更加简洁高效
/// </summary>
[RequireComponent(typeof(Animator))]
public class PlayAnimationUtilitiesSample : MonoBehaviour
{
/// <summary>
/// 要播放的动画剪辑
/// </summary>
public AnimationClip animationClip;
/// <summary>
/// Playable 图,用于管理动画播放流程
/// 由 AnimationPlayableUtilities.PlayClip 自动创建和管理
/// </summary>
PlayableGraph playableGraph;
/// <summary>
/// 初始化并开始播放动画
/// 使用 AnimationPlayableUtilities.PlayClip 一键完成图创建、连接和播放
/// </summary>
void Start()
{
// 使用工具方法一键创建并播放动画,自动处理所有配置
AnimationPlayableUtilities.PlayClip(GetComponent<Animator>(), animationClip, out playableGraph);
}
/// <summary>
/// 组件禁用时清理资源,销毁 Playable 图及其所有可播放项和输出
/// </summary>
void OnDisable()
{
// 销毁该图创建的所有可播放项和输出
playableGraph.Destroy();
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com