1.Unity进阶Playable概述
1.1 知识点
Playable是什么
Playable可以理解成:用“节点图”驱动时间轴内容的一套底层接口。底层的Playable系统在c++端,封闭黑盒,暴露部分API给c#端使用。
- Playable系统侧主要是
Playable、PlayableOutput、PlayableGraph三部分组成。 - 通过一张
PlayableGraph管理各种“可播放对象”(动画、音频、脚本逻辑等),每个对象对应一个Playable节点,通过连线组成一张图。 - 图的右侧连接一个或多个
PlayableOutput,把结果输出到Animator、AudioSource等组件上。
本质上 Animator Controller、Timeline 等高层工具,内部都是在构建 PlayableGraph。Playable系统只是把这层能力直接开放出来,方便我们按需求搭建自己的播放结构。
Playable的作用
从动画系统的角度看,Playable 主要解决几件事:
替代 Legacy Animation,但保留 Mecanim 的高级能力
动画重定向、BlendTree、AvatarMask 等能力本来封装在 Animator 体系里。Playable 提供更底层的接口,既能自建动画系统,又能继续用这些特性。不依赖 AnimatorController 也能播放动画
有些场景只需要“播几个 Clip + 做混合”,维护复杂的 AnimatorController 和状态机并不划算。Playable 允许运行时直接搭图,按需添加节点。更灵活的动态混合
节点可随时增删,权重可按帧调整,不会被 Animator 状态机结构限制。理解与扩展 Timeline 的基础
Timeline 运行时同样是构建 PlayableGraph。掌握 Playable,有助于看懂 Timeline 的结构与源码,也更容易做自定义轨道和行为。
Playable术语与语境
后面会频繁出现包含 Playable 的词,所以我们需要把常见语境对齐,避免混淆:
- Playable 系统:指 Unity 引擎 C++ 端关于 Playable 的整套能力,包含 Playable/PlayableOutput 的创建与连接、PlayableGraph 的构建、运行、销毁等。
- Playable API:指 Playable 系统对 C# 端开放的接口。
- PlayableGraph:图的控制者,负责创建、连接并驱动 Playable/PlayableOutput。
- Playable 节点:Graph 中的数据生产与传递节点,包含叶子节点、Mixer、Layer 等,负责处理数据与权重混合。
- PlayableOutput:Graph 中的输出节点,把 Playable 传递的数据交给具体
target(Animator / AudioSource 等)执行。 - Playable(泛指):
- 在 Graph 语境里通常指“Playable 节点”;
- 在源码语境里通常指
Playable结构体本身; - 在 Timeline 语境里更多指由资产创建出来的具体 Playable(例如某个 Clip 对应的 Playable)。
- PlayableAsset:可创建 Playable 的资产或其运行时实例,TimelineAsset、TrackAsset、各类 ClipAsset 都属于这一类。
- Playable Clip:可播放片段,比如 AnimationClip、AudioClip、Prefab 等。
下面几项与 Timeline 体系关联更密切:
- TrackAsset:特殊的 PlayableAsset,在 Timeline 窗口中一般称作轨道;每条轨道可以放多个 Clip(PlayableClipAsset),运行时通常创建 MixerPlayable 来混合这些 Clip 对应的 Playable。
- PlayableBinding:绑定 Track 与最终运行数据的
target,用于创建 PlayableOutput。 - PlayableDirector:控制 PlayableAsset,负责创建 PlayableGraph 并驱动 Timeline 运行。
Playable的三个重要组成部分:PlayableGraph、Playable和PlayableOutput
PlayableGraph:图的“容器”和调度者

- 管理职责:
- 这张图里有哪些
Playable节点 - 节点之间如何连接
- 有哪些输出(
PlayableOutput)
- 这张图里有哪些
- 生命周期职责:
- 创建 / 销毁节点
- 播放 / 暂停 / Evaluate
- 常见使用步骤:
PlayableGraph.Create("MyGraph")创建图- 在图上创建各种 Playable、PlayableOutput
graph.Play()开始播放graph.Destroy()释放资源
Playable:图里真正干活的“节点”

Playable是实现了IPlayable的struct,代表一个“可播放单元”。- 按功能大致分三类:
- 叶子节点:直接持有可播放内容
- 例如
AnimationClipPlayable、AudioClipPlayable,内部封装一个动画或音频 Clip。
- 例如
- Mixer 节点:负责对多个输入做混合
- 例如
AnimationMixerPlayable、AnimationLayerMixerPlayable。
- 例如
- 脚本节点:由脚本控制行为
- 常用的是
ScriptPlayable<T>,配合PlayableBehaviour实现自定义逻辑。
- 常用的是
- 叶子节点:直接持有可播放内容
- 节点之间通过输入/输出端口连接:
- 连接前需要保证 input / output 端口数量充足(
SetInputCount/SetOutputCount或 Create 时指定 inputCount)。 - 输入带权重(weight),用
SetInputWeight控制混合比例。 - 不允许形成环路,否则 Graph 无法正确评估(Unity 也会提示/报错)。
- 连接前需要保证 input / output 端口数量充足(
PlayableOutput:图的“出口”,输出数据

PlayableOutput也是一个实现IPlayableOutput的struct。- 负责把图的结果“落到”场景对象上,例如:
AnimationPlayableOutput→ 绑定到AnimatorAudioPlayableOutput→ 绑定到AudioSource
- 关键属性 / 方法:
SetSourcePlayable(Playable value, int port):指定输出来源节点。SetWeight(float value):控制该输出在整体中的权重。- 对动画、音频输出,通常还有
target属性,用于绑定具体组件。
ScriptPlayable 与 PlayableBehaviour : 自定义节点必备类
PlayableBehaviour
- Playable行为基类,内部定义了一系列回调:
OnGraphStart/Stop、OnPlayableCreate/Destroy、OnBehaviourPlay/Pause、PrepareFrame、ProcessFrame等。 - 可以把它理解成“这个节点在每一帧、图开始/结束等时刻要做什么”。它更像是挂在 Playable 节点上的
MonoBehaviour(类比用,并非完全等价)。
ScriptPlayable<T>
- 泛型
struct,内部持有T : PlayableBehaviour。 - 通过
ScriptPlayable<T>.Create(graph, inputCount)创建节点,再用GetBehaviour()取得T实例并编写逻辑。 - ScriptPlayable + PlayableBehaviour 组合起来,就能实现“自定义 Playable 节点”。
后续如果要做“自定义 Timeline 轨道”,或“根据游戏状态驱动 UI / 音效 / 镜头”等逻辑节点,基本都会围绕这两个类展开。
Animator、Timeline 与 Playable 的关系
- Animator Controller 可以看作是“基于 PlayableGraph 封装出的动画状态机编辑器”。
- Timeline 资产运行时由
PlayableDirector基于TimelineAsset构建 PlayableGraph:- 根节点是
TimelinePlayable - 下层是各 Track 对应的 Mixer / Layer 节点
- 最底层是每个 Clip 对应的 Playable
- 最右侧通过
PlayableOutput绑定到 Animator / AudioSource / PlayableDirector(子 Timeline)等
- 根节点是
因此 Playable 更像底层基础设施,Animator / Timeline 则是上层工具。
Playable常见使用场景预览
- 简单播放动画
不创建 AnimatorController,直接用AnimationClipPlayable+AnimationPlayableOutput驱动角色动画。 - 动态混合多个动画
使用AnimationMixerPlayable混合走路 / 跑步 / 攻击动画,每帧按速度、状态调整权重。 - 分层动画控制
使用AnimationLayerMixerPlayable做上下半身分离、局部覆盖(配合 AvatarMask)。 - 自定义逻辑节点
用 ScriptPlayable + PlayableBehaviour 实现“镜头抖动”“按节奏触发事件”“根据游戏数据控制 Timeline”等。 - 扩展 Timeline 功能
自定义 Track / Clip / Playable,为 Timeline 增加新类型轨道(如控制特效参数、角色属性、剧情逻辑等)。 - 基于 Timeline 的编辑器工具
例如过场编辑器、技能编辑器等。
PlayableGraph Visualizer
PlayableGraph Visualizer 是官方提供的可视化工具。通过 github 下载。导入后在 Window > PlayableGraph Visualizer 打开窗口。
选中一个动画 Clip,即可在窗口中直观看到 Graph 的结构。
UnityPlayableGraphMonitorTool
UnityPlayableGraphMonitorTool是一个社区插件,用来观察运行中的 PlayableGraph。仓库地址:通过 github 下载
安装步骤(OpenUPM Scoped Registry)
- 打开
Edit > Project Settings > Package Manager,添加或编辑 OpenUPM Registry:Name:package.openupm.comURL:https://package.openupm.comScope(s):com.greenbamboogames.playablegraphmonitor

- 打开
Window > Package Manager,点击+选择Add package by name...:Name:com.greenbamboogames.playablegraphmonitorVersion:2.6.3


使用方式
从 Unity 菜单 Window > Analysis > PlayableGraph Monitor 打开窗口。左上角下拉框选择一个 Graph,就能看到它的拓扑结构;点击任意节点,可在右侧 Inspector 查看节点细节。

对比PlayableGraph Visualizer 和 UnityPlayableGraphMonitorTool


两者的构图方式不一样:
- PlayableGraph Visualizer:从
PlayableOutput出发组织图,每个 Output 会单独形成一棵子图。 - PlayableGraph Monitor:从叶子节点往 Output 方向构图,更接近“创建时的连接关系”。
严格来说两者都没有错,只是“看图的出发点”不同:
- Visualizer 以
PlayableOutput为入口,更像在展示“运行时的数据拉取路径”,所以每个 Output 会独立成图。 - Monitor 以节点连接关系为入口,更像在展示“创建时的连接拓扑”,对排查 Graph 结构更直观。
实际使用体验上,Visualizer 不能缩放且偶发不稳定;Monitor 更适合日常看结构。
另外 Monitor 里两个 PlayableOutput 偶尔会显示连到同一个 Output 端口,这通常是 Timeline 构图时的显示问题,不影响运行,理解为它们分别连到不同端口即可。
相关文档与参考
官方文档
社区文章
- Playable API 深入解析 - CSDN @alexhu2010q
- Playable 系统 UML 结构分析(节选) - CSDN @RingleaderWang
- Unity 动画系统使用整理 — Playable - CSDN
- Animation Playable Bug、限制及解决方案汇总
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com