【UE】【BP】在蓝图中Key关卡序列
以前都是处理资产标准化遍历材质和相关param和refrence相关就可以第一次接触Seq还挺有意思。但是因为后续多半是使用As来编写逻辑了不会使用蓝图了所以这个文档多半不会再更新。学习思路和实际上的实现逻辑是接近的一般节点和function能关联上所以文档在Seq遍历的理解上上也有一定价值作为一个存档吧。And我的网课开始了没精力了…Runtime 控制 vs Editor 编辑你对 Sequence 的需求通常分两类Runtime运行时 “播放控制、动态替换绑定”常见任务Play / Pause / Stop / Reverse / LoopJump/Seek 到某个时间或帧动态换绑定同一段镜头换角色/道具/相机Rebinding这类通常用LevelSequenceActor/LevelSequencePlayer完成。Editor编辑器 “改资产、做批处理”常见任务批量遍历 Content Browser 里选中的多个 Level Sequence修复丢失引用Binding 断了批量加 Track / Section批量打 Key / 改曲线批量 Bake/导出 AnimSequence这类通常在Editor Utility WidgetEUW或 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); TArrayUMovieSceneTrack 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; } TArrayUMovieSceneSection Sections Track.GetSections(); for (auto Section : Sections) { if (Section nullptr) { continue; } TArrayUMovieSceneScriptingChannel Channels Section.GetAllChannels(); for (auto Channel : Channels) { if (Channel nullptr) { continue; } if (Channel.ChannelName nLocation.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 UtilitiesEUW 常用选资产、存资产、日志/工具链。如果你发现“加轨/打 Key”相关节点搜不到第一件事就是检查 Sequencer Scripting 是否启用。2.2 你会高频用到的“入口库”在蓝图里搜索这些关键词能快速定位入口LevelSequenceEditor编辑器上下文获取当前 Sequencer 打开的 Sequence获取选中的绑定bindings刷新 Sequencer UIMovieSceneExtensions结构编辑入口这一块变化比较多需要自己去理解MovieSceneSequenceExtensions从 Sequence 取 bindings、添加轨、设置绑定等MovieSceneTrackExtensions从 Track 取 sections 等MovieSceneSectionExtensions、MovieSceneChannelExtensions获取 channels / keys / 添加 key 等SequencerTools导出/烘焙一类的编辑器工具例如 Export Anim Sequence3. Part A运行时用蓝图“操作”Sequence播放/跳转/换绑定3.1 最常用Create Level Sequence Player典型流程Create Level Sequence Player输入 Sequence 资产 播放设置得到LevelSequencePlayer调用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编辑器用蓝图“编辑资产”SequenceEUW 批处理主战场编辑器批处理的核心目标“对资产本身做修改”而不是“仅在运行时改播放对象”。你会非常频繁遇到三件事获取要处理的 Level Sequence 资产修改 bindings/tracks/keys刷新 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 添加某种 TrackTransform / 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 Actor6.1 问题长什么样你会看到Sequence 里轨道还在CameraCut、Transform 都在但提示 “The object bound to this track is missing” 一类信息播放时镜头/动画不动这通常说明Binding 断了原 Actor 被删/改名/换关卡/换层级。6.2 工具算法稳定版输入一组 Level Sequence 资产 你的“匹配规则”输出修复后的资产binding 重新指向正确 Actor流程对每个 Sequence获取所有 bindings对每个 binding检查“当前绑定对象列表”是否为空为空 → 说明断了用你的规则在关卡中找到目标 Actor按 Name/Tag/映射表将该 Actor 重新绑定到该 binding刷新 UI 保存资产6.3 “匹配规则”怎么设计才不脆推荐优先级从稳到不稳Binding Tag / 自定义 Tag最推荐Actor Tag关卡里给 Actor 打 tagActor Label编辑器显示名Object Name可读性差、容易变化“第几个 binding”最不稳尽量别用最稳的做法在制作 Sequence 时就规定每个关键对象必须有固定的 Binding Tag/命名约定。这样修复工具才能 100% 自动化。7. 实战 2批量添加 Track SectionTransform / Property / Parameter你做“批量加轨”通常分三类7.1 给绑定对象加 Transform Track最常见适用相机、道具、角色根节点、任何 Actor 级动画。步骤概念找到目标 bindingAdd Track3D Transform TrackAdd SectionTransform Section设置 Section 范围例如覆盖整个 Sequence获取 channelsLocation/Rotation/Scale并打 key7.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通用思路找到 Section拿到 ChannelFloat/Bool/Enum/Vector 等将时间帧转换到序列的 frame spaceAdd KeyTime, 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.28.3 删除/稀疏化 Key进阶用途降噪比如动捕抖动降低点数性能/文件大小清理误打 key工具误操作实现思路Get Keys → 按规则筛选例如每隔 N 个保留一个→ 删除其余实战建议给工具加 “Dry Run / 预览统计”避免一键删爆。9. 实战 4自动 Camera Cut创建 Cut 轨 绑定相机如果你做“模板镜头序列”或“自动生成预览 Sequence”CameraCut 基本是必备。社区给过一个很实用的蓝图链路UE5.2 起非常常用Add PossessableObject to CameraActorAdd Tracktype Camera Cut TrackAdd SectionCast to MovieSceneCameraCutSectionSet Camera Binding IDCamera Binding ID 来自 Add Possessable 返回的 Binding ID你可以把它封装成“把当前选中的 CameraActor 自动接到当前 Sequence 的 CameraCut”或“创建一个新 Sequence 并自动生成 CameraCut 镜头片段”10. 实战 5Sequencer 驱动蓝图Event Track / Director / Expose to Cinematics10.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. 实战 6Bake / 导出 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 断了需要你在关卡里重新找 ActorSpawnable 则可能根本不需要“找关卡 Actor”导出动画Spawnable 可能需要先保证它能被正确 spawn导出才有效重用模板模板序列更推荐用 Spawnable可移植但也更容易遇到“运行时对象生命周期”的坑13. 时间系统秒 / 帧 / DisplayRate / TickResolution别把 Key 打偏了Sequencer 里至少有两套“时间尺度”Display Rate你在 UI 里看到的帧率例如 24/30/60Tick Resolution内部更细的时间分辨率用于精确采样工具开发时建议统一使用 FrameNumber不要混用秒和帧所有“外部输入时间”比如你 UI 输入的秒都先转换到 Sequence 的 frame space写 key 之前确认该 Section 的起止范围覆盖了你要写的时间如果你做“按当前播放头帧打 key”的工具需要从 Level Sequence Editor 获取当前时间/当前帧不同版本的 API 名称略有差异思路一致。14. “看起来没生效”的 90% 根因刷新 UI 保存资产你在 EUW 里改完 Sequence 后常见症状你确定写了 key但 Sequencer 面板不显示变化或者重开编辑器后全没了解决方案几乎永远是这两步刷新 Sequencer UI有专门的蓝图 API刷新在“下一 tick”生效保存资产你改的是资产不保存就不会落盘建议把这两步做成工具里的“统一收口”每次批处理结束都自动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 UInext tick若你在批量循环里频繁刷新建议“最后统一刷新一次”避免卡顿16. 工程化最佳实践让你的批处理工具可维护、可升级定位规则与编辑动作分离定位如何找到 binding/actorTag、Name、映射表动作如何加轨/打 key/导出分离后你改定位规则不会牵动全部逻辑。用 Binding Tag / Actor Tag 做稳定锚点不要依赖数组下标不要依赖临时对象名否则序列一重排你工具就炸。加日志与统计每个 Sequence修了几个 binding、加了几条轨、写了多少 keys错误记录找不到 actor、property path 无效、cast 失败批量跑全库没有日志 无法维护。做 Dry Run预演模式先扫描不写入只输出“将要改哪些”确认无误再执行写入这能避免“一键毁库”。封装版本差异点UE5.x 某些 API 会改名或迁移把“添加 spawnable/添加 subsequence/导出动画”等入口封装成单独函数未来升级 UE 时只改一处。参考资料下面是你写工具时最该收藏的一组入口官方/社区方便你对照节点名与行为。EpicSequencer Scripting Foundations自动化编辑 Level Sequence 的基础心智模型。EpicAdd Property Tracks and Keys to a Sequence in BPsProperty Track Key 的标准模板。EpicActor Rebinding in Blueprints with Sequencer动态/修复绑定的官方说明。EpicTrigger Level Blueprint Events from SequencerEvent Track 触发蓝图。EpicRefresh Current Level Sequence刷新 Sequencer UI。EpicExport Anim Sequence编辑器脚本导出 / 烘焙。EpicSet Camera Binding IDCameraCut 绑定。论坛CameraCut 绑定蓝图链路UE5.2 经验贴CameraCut 绑定蓝图链路参考。论坛Component/Parameter 轨道加 KeyMovieSceneParameterSection 等Component / Parameter 轨道加 Key 的讨论与实现经验。Tech BlogPerformance at Scale: Sequencer in Unreal Engine 4.26Sequencer 性能与规模化帮助理解大项目序列的性能特征。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2416594.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!