以前都是处理资产标准化,遍历材质和相关param和refrence相关就可以,第一次接触Seq,还挺有意思。
但是因为后续多半是使用As来编写逻辑了,不会使用蓝图了,所以这个文档多半不会再更新。
学习思路和实际上的实现逻辑是接近的,一般节点和function能关联上,所以文档在Seq遍历的理解上上也有一定价值,作为一个存档吧。And,我的网课开始了,没精力了...
Runtime 控制 vs Editor 编辑
你对 Sequence 的需求通常分两类:
Runtime(运行时)= “播放控制、动态替换绑定”
常见任务:
- Play / Pause / Stop / Reverse / Loop
- Jump/Seek 到某个时间或帧
- 动态换绑定:同一段镜头,换角色/道具/相机(Rebinding)
这类通常用 LevelSequenceActor / LevelSequencePlayer 完成。
Editor(编辑器)= “改资产、做批处理”
常见任务:
- 批量遍历 Content Browser 里选中的多个 Level Sequence
- 修复丢失引用(Binding 断了)
- 批量加 Track / Section
- 批量打 Key / 改曲线
- 批量 Bake/导出 AnimSequence
这类通常在 Editor Utility Widget(EUW) 或 Editor Utility Blueprint 里做,靠 Sequencer Scripting 提供的扩展库。
1. Sequencer 的数据结构:你到底在改什么?
把 Level Sequence 想成“时间轴资产”,它内部关键结构是一条链:
LevelSequence(资产)
→ MovieScene(根时间轴容器)
→ Object Bindings(对象绑定:这条轨控制谁)
→ Tracks(轨道:控制什么类型数据,如 Transform / CameraCut / Property)
→ Sections(片段:轨道上的时间区间)
→ Channels(通道:Transform.X 等)
→ Keys(关键帧:时间+值)
你做工具时,“编辑 Sequence”=
找到 Binding → 创建/修改 Track → 创建/修改 Section → 拿到 Channel → 写 Keys → 刷新 UI → 保存资产
这一篇知乎说的还蛮清楚的。
精髓就是这两张图。


当然我在实战的时候发现其实也是变化比较多的,需要自己去官方文档一点点推理。
比如这里设置相机就是很标准的上述流程,不管是蓝图还是As,都是这个层级这个套路。

如果是As的话,大概是这样的,基本一样这里是修改相机Z轴,前面TargetZ已经定义过了:
private bool TryUpdateCameraBindingTrackZ(FMovieSceneBindingProxy Binding, float TargetZ)
{
SetLogsText("[Step] Searching camera transform tracks");
TArray<UMovieSceneTrack> Tracks = Binding.FindTracksByType(UMovieScene3DTransformTrack::StaticClass());
SetLogsText(f"[Info] Transform track count: {Tracks.Num()}");
bool bUpdated = false;
int UpdatedChannelCount = 0;
for (auto Track : Tracks)
{
if (Track == nullptr)
{
continue;
}
TArray<UMovieSceneSection> Sections = Track.GetSections();
for (auto Section : Sections)
{
if (Section == nullptr)
{
continue;
}
TArray<UMovieSceneScriptingChannel> Channels = Section.GetAllChannels();
for (auto Channel : Channels)
{
if (Channel == nullptr)
{
continue;
}
if (Channel.ChannelName == n"Location.Z")
{
if (ApplyTargetZToScriptingChannel(Channel, TargetZ))
{
bUpdated = true;
UpdatedChannelCount++;
}
}
}
}
}但是动画没有这个Channel。这一点感觉没有人特地说过..我做这个动画项目的时候搞了一下午才查到的..
因为普通属性和动画的保存方式不一样。普通属性,比如位置、旋转、颜色,是这样:
Track -> Section -> Channel
这些值是 Sequencer 自己存的,所以能看到 Channel。
动画,比如 Anim Sequence,是这样:
Track -> Section -> 动画资源
动画的骨骼关键帧保存在动画资源里,不在 Sequencer 的 Channel 里。
最后实现是这样的。

2. 开工前的准备:插件、蓝图库、节点搜索关键词
2.1 建议启用的插件
- Sequencer Scripting(强烈建议):提供 Sequence/Track/Section/Channel/Key 的脚本访问入口(Blueprint / Python 都能用)。
- Editor Scripting Utilities:EUW 常用(选资产、存资产、日志/工具链)。
如果你发现“加轨/打 Key”相关节点搜不到,第一件事就是检查 Sequencer Scripting 是否启用。
2.2 你会高频用到的“入口库”
在蓝图里搜索这些关键词,能快速定位入口:
LevelSequenceEditor(编辑器上下文)
- 获取当前 Sequencer 打开的 Sequence
- 获取选中的绑定(bindings)
- 刷新 Sequencer UI
MovieSceneExtensions(==结构编辑入口==)++这一块变化比较多,需要自己去理解++
MovieSceneSequenceExtensions(从 Sequence 取 bindings、添加轨、设置绑定等)MovieSceneTrackExtensions(从 Track 取 sections 等)MovieSceneSectionExtensions、MovieSceneChannelExtensions(获取 channels / keys / 添加 key 等)
SequencerTools(导出/烘焙一类的编辑器工具)
- 例如 Export Anim Sequence
3. Part A:运行时用蓝图“操作”Sequence(播放/跳转/换绑定)
3.1 最常用:Create Level Sequence Player
典型流程:
1) Create Level Sequence Player(输入 Sequence 资产 + 播放设置)
2) 得到 LevelSequencePlayer
3) 调用 Play / Pause / Stop / SetPlaybackPosition 等
适合“临时播放某段 Sequence”。
3.2 跳转到某个时间/帧(Seek / Jump)
- 如果你要求“镜头帧精确对齐”,尽量按 帧 来思考(FrameNumber / FrameRate)。
- 只需要粗略跳转,可用秒。
3.3 动态换绑定(Rebinding)
典型场景:
- Sequence 里原本绑定的是一个关卡里的相机 A
- 运行时你想用相机 B 来跑同一段 CameraCut / Transform
- 或者角色是运行时 Spawn 的,你需要把轨道绑定到新角色
实现思路:
- 找到需要替换的 Binding(用名字/Tag 更稳)
- Override/Set Binding 为新 Actor(官方“Actor Rebinding”文档有完整流程)
4. Part B:编辑器用蓝图“编辑资产”Sequence(EUW 批处理主战场)
编辑器批处理的核心目标:“对资产本身做修改”,而不是“仅在运行时改播放对象”。
你会非常频繁遇到三件事:
1) 获取要处理的 Level Sequence 资产
2) 修改 bindings/tracks/keys
3) 刷新 UI + 保存资产(不然你会怀疑人生)
4.1 获取要处理的 Sequence:三种入口
方式 A:从 Content Browser 选中资产开始(最常见)
适合做“批量修改选中的多个 Sequence”。
方式 B:获取当前 Sequencer 打开的 Sequence(对当前序列一键修复)
适合做“我正在看这个序列,我要一键修复/一键加轨/一键打 key”。
方式 C:扫描某个目录下所有 Sequence(全库升级/修复)
适合做“我想把整个项目某类序列统一改一遍”。
5. 关键能力地图:Bindings / Tracks / Sections / Channels / Keys
下面这张“能力地图”建议你背下来:它决定了你写 EUW 是否能从 0 到 1。
5.1 Bindings:对象绑定(这条轨控制谁)
你常用的能力:
- 列出 Sequence 的所有绑定(遍历)
- 读取绑定的 Display Name / Binding ID
- 获取这个绑定当前绑定了哪些对象(在编辑器里尤其关键)
- 设置/替换绑定(修复引用、换角色、换相机)
5.2 Tracks:轨道(控制什么)
你常用的能力:
- 给 Binding 添加某种 Track(Transform / Property / Parameter / CameraCut 等)
- 读取 Track 下有哪些 Sections
- 删除某些 Track 或合并结构(进阶)
5.3 Sections:片段(时间区间)
你常用的能力:
- 设置 Section 的起止范围(start/end frame)
- 获取 Section 的 Channels(例如 Transform 的 9 个 float 通道)
5.4 Channels / Keys:曲线与关键帧(核心编辑能力)
你常用的能力:
- 在某个时间(帧)添加 key
- 批量偏移/缩放时间
- 批量改值
- 删除 key(稀疏化、清理噪点)
一旦你能稳定做到“拿到 Channel 并写 Key”,Sequencer 就变成了“可编程时间轴”。
6. 实战 1:批量修复丢失引用(Missing Binding / Missing Actor)
6.1 问题长什么样?
你会看到:
- Sequence 里轨道还在(CameraCut、Transform 都在)
- 但提示 “The object bound to this track is missing” 一类信息
- 播放时镜头/动画不动
这通常说明:Binding 断了(原 Actor 被删/改名/换关卡/换层级)。
6.2 工具算法(稳定版)
输入: 一组 Level Sequence 资产 + 你的“匹配规则”
输出: 修复后的资产(binding 重新指向正确 Actor)
流程:
1) 对每个 Sequence:获取所有 bindings
2) 对每个 binding:检查“当前绑定对象列表”是否为空
3) 为空 → 说明断了
4) 用你的规则在关卡中找到目标 Actor(按 Name/Tag/映射表)
5) 将该 Actor 重新绑定到该 binding
6) 刷新 UI + 保存资产
6.3 “匹配规则”怎么设计才不脆?
推荐优先级(从稳到不稳):
1) Binding Tag / 自定义 Tag(最推荐)
2) Actor Tag(关卡里给 Actor 打 tag)
3) Actor Label(编辑器显示名)
4) Object Name(可读性差、容易变化)
5) “第几个 binding”(最不稳,尽量别用)
最稳的做法:
在制作 Sequence 时就规定:每个关键对象必须有固定的 Binding Tag/命名约定。
这样修复工具才能 100% 自动化。
7. 实战 2:批量添加 Track + Section(Transform / Property / Parameter)
你做“批量加轨”通常分三类:
7.1 给绑定对象加 Transform Track(最常见)
适用:相机、道具、角色根节点、任何 Actor 级动画。
步骤(概念):
1) 找到目标 binding
2) Add Track:3D Transform Track
3) Add Section:Transform Section
4) 设置 Section 范围(例如覆盖整个 Sequence)
5) 获取 channels(Location/Rotation/Scale)并打 key
7.2 给绑定对象加 Property Track(关键:PropertyPath)
适用:灯光强度、FOV、景深、蓝图变量等。
官方有专门的 Blueprint snippet 讲“如何拿 property name/path、track class,并把轨道加到 object binding 上并 keying”。
它基本就是“Property Track 批处理”的标准模板。
PropertyPath 怎么拿?
常见思路(不同版本 UI 名称可能略有差异):
- 在 Sequencer 里手动加一次该属性轨,然后在轨道/属性上找 “Copy/Reference/Path” 类的菜单
- 或者直接用“你知道的属性名 + 组件层级”拼接(不推荐,容易写错)
- 或者把“可配置的 property path”做成 EUW 的可编辑字段(更像工具)
7.3 参数轨(Material/Component 参数)
适用:材质 Scalar/Vector 参数、组件材质索引等。
社区经验:
- 一些参数轨需要 cast 到特定 section(例如
MovieSceneParameterSection)后调用 “Add Scalar Parameter Key”。 - 某些细节在蓝图中可能不可调用(需要 C++ 暴露),因此你做工具时要准备“降级方案”(例如改用 Python、或改为在 Sequencer 中预设模板轨后复制)。
8. 实战 3:批量打 Key(写入曲线)与批量改 Key(偏移/缩放/删点)
8.1 批量打 Key:通用思路
1) 找到 Section
2) 拿到 Channel(Float/Bool/Enum/Vector 等)
3) 将时间(帧)转换到序列的 frame space
4) Add Key(Time, Value)
三种“打 key”的高频模式:
- 初始化:在 0 帧写入初始值(例如相机初始 Transform)
- 固定节奏:每 N 帧写一组 key(例如每 10 帧采样一次)
- 二段式:start/end 两个 key,靠曲线自动插值(常见镜头推拉)
8.2 批量改 Key:偏移 / 缩放 / 改值
- 时间偏移:所有 keys 的 time += Δ
- 时间缩放:time = (time - pivot) * scale + pivot
- 数值偏移:value += Δ(例如 FOV 全部 +5)
- 数值缩放:value *= scale(例如强度统一乘 1.2)
8.3 删除/稀疏化 Key(进阶)
用途:
- 降噪(比如动捕抖动)
- 降低点数(性能/文件大小)
- 清理误打 key(工具误操作)
实现思路:
- Get Keys → 按规则筛选(例如每隔 N 个保留一个)→ 删除其余
- 实战建议:给工具加 “Dry Run / 预览统计”,避免一键删爆。
9. 实战 4:自动 Camera Cut(创建 Cut 轨 + 绑定相机)
如果你做“模板镜头序列”或“自动生成预览 Sequence”,CameraCut 基本是必备。
社区给过一个很实用的蓝图链路(UE5.2 起非常常用):
1) Add Possessable(Object to = CameraActor)
2) Add Track(type = Camera Cut Track)
3) Add Section
4) Cast to MovieSceneCameraCutSection
5) Set Camera Binding ID(Camera Binding ID 来自 Add Possessable 返回的 Binding ID)
你可以把它封装成:
“把当前选中的 CameraActor 自动接到当前 Sequence 的 CameraCut”
或
“创建一个新 Sequence 并自动生成 CameraCut + 镜头片段”
10. 实战 5:Sequencer 驱动蓝图(Event Track / Director / Expose to Cinematics)
10.1 Event Track:在某一帧触发事件
最常见用途:
- 镜头到某帧:开门/播音效/触发 VFX
- 片段结束:切下一个 Sequence
- 与 UI/剧情逻辑联动
官方提供了“从 Sequencer 的 Event Track 触发 Level Blueprint 事件”的流程。
10.2 Expose to Cinematics:让 Sequencer 直接关键帧控制蓝图变量
你想在 Sequencer 里对蓝图变量打 key(比如 float 强度、bool 开关),通常需要把变量设置为“可被 Cinematics 暴露”。
这样变量才会出现在 Sequencer 的可添加轨道列表里。
典型场景:
- 控制材质参数(配合 MID)
- 控制景深、后期参数(如果你把它们封装成蓝图变量)
- 控制动画蓝图参数(例如表情强度、IK 权重)
11. 实战 6:Bake / 导出 AnimSequence(编辑器脚本)
如果你希望把 Sequencer 里的动画烘焙成 AnimSequence(类似 “Bake to Animation Sequence”),可以用 SequencerTools 的导出节点。
常见批处理需求:
- 一个 Sequence 里多个角色绑定:一键全部导出为 AnimSequence
- 自动化管线:修改 Sequence 后自动导出供后续流程使用
注意事项:
- 这类节点多数是 Editor Scripting 范畴,不是运行时功能
- 需要确保绑定对象上存在可导出的 SkeletalMeshComponent
- 对 spawnables/动态生成对象的处理要特别小心(有些导出版本会“先 spawn 再导出”)
12. Spawnable vs Possessable:工具开发绕不开的概念
Possessable(占用型)
- 绑定到关卡里已经存在的 Actor
- 最常见:关卡相机、关卡灯光、场景道具
Spawnable(生成型)
- Sequence 播放时由 Sequencer 负责 Spawn/Destroy
- 常见:镜头用的临时道具、特效、一次性演员
为什么这对工具很重要?
- 修引用:Possessable 断了需要你在关卡里重新找 Actor;Spawnable 则可能根本不需要“找关卡 Actor”
- 导出动画:Spawnable 可能需要先保证它能被正确 spawn,导出才有效
- 重用模板:模板序列更推荐用 Spawnable(可移植),但也更容易遇到“运行时对象生命周期”的坑
13. 时间系统:秒 / 帧 / DisplayRate / TickResolution(别把 Key 打偏了)
Sequencer 里至少有两套“时间尺度”:
- Display Rate:你在 UI 里看到的帧率(例如 24/30/60)
- Tick Resolution:内部更细的时间分辨率(用于精确采样)
工具开发时建议:
1) 统一使用 FrameNumber(不要混用秒和帧)
2) 所有“外部输入时间”(比如你 UI 输入的秒)都先转换到 Sequence 的 frame space
3) 写 key 之前确认:该 Section 的起止范围覆盖了你要写的时间
如果你做“按当前播放头帧打 key”的工具:
- 需要从 Level Sequence Editor 获取当前时间/当前帧(不同版本的 API 名称略有差异,思路一致)。
14. “看起来没生效”的 90% 根因:刷新 UI + 保存资产
你在 EUW 里改完 Sequence 后,常见症状:
- 你确定写了 key
- 但 Sequencer 面板不显示变化
- 或者重开编辑器后全没了
解决方案几乎永远是这两步:
1) 刷新 Sequencer UI
- 有专门的蓝图 API:刷新在“下一 tick”生效
2) 保存资产
- 你改的是资产,不保存就不会落盘
建议把这两步做成工具里的“统一收口”:
每次批处理结束都自动:Refresh + Save + 打日志
15. 常见坑与排错清单(节点找不到/轨道缺失/变量不可关键帧)
15.1 节点搜不到(最常见)
- 先看插件:Sequencer Scripting 是否启用
- 再看上下文:你是不是在 Runtime 蓝图里找 Editor-only 节点?
15.2 Property Tracks 缺失 / 某些属性找不到
原因通常是:
- 属性不可被 Sequencer 动画化(或未暴露)
- 你要控制的是组件/子对象属性,但轨道层级没选对
- 蓝图变量没启用 “Expose to Cinematics”
解决策略:
- 先手动在 Sequencer 里加一次轨道,看它真实生成了什么轨(Track 类型 + 目标对象层级)
- 再回到工具里按同样结构生成
15.3 CameraCut 绑定不上
- 最稳的方式:Set Camera Binding ID 的输入 Binding ID 直接来源于 “Add Possessable 返回的 Binding ID”
15.4 修改生效但 UI 不更新
- 刷新 Sequencer UI(next tick)
- 若你在批量循环里频繁刷新,建议“最后统一刷新一次”,避免卡顿
16. 工程化最佳实践:让你的批处理工具可维护、可升级
1) 定位规则与编辑动作分离
- 定位:如何找到 binding/actor(Tag、Name、映射表)
- 动作:如何加轨/打 key/导出
分离后,你改定位规则不会牵动全部逻辑。
2) 用 Binding Tag / Actor Tag 做稳定锚点
- 不要依赖数组下标
- 不要依赖临时对象名
否则序列一重排,你工具就炸。
3) 加日志与统计
- 每个 Sequence:修了几个 binding、加了几条轨、写了多少 keys
- 错误记录:找不到 actor、property path 无效、cast 失败
批量跑全库没有日志 = 无法维护。
4) 做 Dry Run(预演模式)
- 先扫描不写入,只输出“将要改哪些”
- 确认无误再执行写入
这能避免“一键毁库”。
5) 封装版本差异点
- UE5.x 某些 API 会改名或迁移
- 把“添加 spawnable/添加 subsequence/导出动画”等入口封装成单独函数
未来升级 UE 时只改一处。
参考资料
下面是你写工具时最该收藏的一组入口(官方/社区),方便你对照节点名与行为。
- Epic:Sequencer Scripting Foundations
自动化编辑 Level Sequence 的基础心智模型。 - Epic:Add Property Tracks and Keys to a Sequence in BPs
Property Track + Key 的标准模板。 - Epic:Actor Rebinding in Blueprints with Sequencer
动态/修复绑定的官方说明。 - Epic:Trigger Level Blueprint Events from Sequencer
Event Track 触发蓝图。 - Epic:Refresh Current Level Sequence
刷新 Sequencer UI。 - Epic:Export Anim Sequence
编辑器脚本导出 / 烘焙。 - Epic:Set Camera Binding ID
CameraCut 绑定。 - 论坛:CameraCut 绑定蓝图链路(UE5.2 经验贴)
CameraCut 绑定蓝图链路参考。 - 论坛:Component/Parameter 轨道加 Key(MovieSceneParameterSection 等)
Component / Parameter 轨道加 Key 的讨论与实现经验。 - Tech Blog:Performance at Scale: Sequencer in Unreal Engine 4.26
Sequencer 性能与规模化,帮助理解大项目序列的性能特征。