Roblox 预告片
SK=<此技能文件夹的路径>。该技能所构建的简要目标:“录制它,让它看起来像我在玩,并且也剪辑好它。”
每个游戏的所有文件都存放在 <game>/trailer/ 中:shots.json、clips/、out/。脚本是通用的,所有游戏特定的名称(标签、Remote、提示文本、物品 ID)都放在 shots.json 中。
基本规则(请先阅读)
- 它录制用户的真实屏幕。 录制前,通过聊天告知用户保持 Studio 在最前面且不被遮挡,将鼠标移出游戏视图,在你说完成之前不要触碰电脑,并获得用户的确认。仅录制校准后的视口区域。使用
record.py clean删除测试和弃用的片段。切勿使用-C(光标)。 - Studio 礼仪:为此使用一个 Studio MCP 服务器(基于社区
robloxstudio服务器编写,而非内置的 Roblox_Studio 服务器)。在开始测试前,检查是否有其他 Agent 正在使用 Studio。在编辑模式下导入工具包,之后移除,并且永远不要保存带有该工具包的位置。 - 诚实:Roblox 拒绝显示游戏不具备的功能、增强图形或广告声明的视频。在镜头前安排哪个真实结果发生(为一次拍摄强制改变概率、授予物品)是可以的。伪造游戏无法做到的事情是不允许的;应重新构建镜头(参见示例中的 Gold→Rainbow 蒙太奇)。
- 不使用计算机使用(Computer Use)功能。 所有操作都通过 MCP eval 调用、Python 和 ffmpeg 完成。
- 保持卡片和文字简洁(“主题而不杂乱”:工具上没有额外的噪音)。游戏自身的 UI 是最好的文字。
工作流程
1. 规划
阅读 references/shot-list-template.md。根据游戏的 GAME.md、FINISHED.md 和源代码,编写镜头表格(前 2-3 秒的钩子、核心循环、稀有事件、社交元素、基础/进度、一个额外系统、标题卡片、仅用于社交的 CTA)并在录制前展示给用户。然后编写 <game>/trailer/shots.json(模式见 references/luau-api.md;从 assets/shots.template.json 开始,或参考 references/example.shots.json 的完整示例)。python3 $SK/scripts/build_kit.py list --shots <shots.json> 汇总原始素材的总时长。
2. 游戏主视角和电影级镜头(Luau)
scripts/TrailerDriver.luau在测试客户端上运行一个镜头:将角色传送到起始姿势,禁用键盘控制,沿着航点行走(Humanoid:MoveTo、寻路、跳跃、人物抖动),转向面对目标,按下 ProximityPrompt(InputHoldBegin/End),调用 Remote 或 Bindable,并根据提示或游戏事件切换摄像机。其玩家摄像机是具有鼠标式漂移、震颤和扫视功能的延迟跟随。游戏 HUD 在游戏玩法镜头中保持开启,在电影镜头中关闭;Roblox 顶部栏、CoreGui 和光标始终关闭。每次运行都会先停止之前的运行并在之后恢复所有内容。scripts/CameraRig.luau包含电影级预设:推轨/样条/飞越、贝塞尔曲线、环绕、升降、推进(含运动模糊)和静态。所有预设都通过 TweenService 曲线进行了缓动,并具有可配置的持续时间。- 获取它们:
build_kit.py rbxmx→ 导入到ReplicatedStorage(编辑模式)→ 启动测试 → 使用eval_client_runtime发送build_kit.py call --shot ID。如果镜头包含设置,则先使用eval_server_runtime运行build_kit.py server --shot ID。详细信息和完整操作列表见references/luau-api.md。
3. 录制
参考 references/recording.md。简而言之:首先运行一次 record.py calibrate(驱动程序将视口绘制为青色,脚本找到它),然后为每个镜头运行 record.py shot ID --start-ms <startsAtMs> --dur <dur>。它会等待驱动程序计划的开始时间,录制预卷 + 镜头 + 尾部(仅视口),并存储精确的修剪偏移量。如果屏幕录制不可用,record.py stitch 会将保存的 capture_screenshot 帧转换为片段。
4. 编辑
参考 references/editing.md。edit.py build --cut roblox --format landscape 制作 Roblox 上传版本(最长 30 秒,1080p60 H.264,无 CTA)。--cut social --format both 制作 16:9 加 9:16 两个版本。文本使用 Pillow 绘制,因为 Homebrew 的 ffmpeg 可能没有 drawtext 功能。如果未安装 Fredoka One 字体,请在下载到 assets/fonts/ 之前询问用户;它会回退到 Arial Rounded Bold。
5. 质量检查
录制后运行 qa.py clips --shots ...;编辑后运行 qa.py final <mp4> --roblox。它检查丢帧、黑帧和冻帧、Studio UI 边缘条带、光标标志以及 Roblox 限制,并生成联系表。用阅读工具打开联系表并查看它:任何杂散的 Studio 面板、光标或错误的 HUD 状态都会显示在那里。然后向用户展示剪辑版本(路径及联系表)并记下重新剪辑的备注。重新剪辑仅需运行 edit.py。
6. 清理
停止测试,删除 ReplicatedStorage.TrailerKit,运行 record.py clean --out <trailer> --shots <shots.json>,并删除 <trailer>/build/。保留 clips/(原始素材)和 out/。
参考文件映射
| 文件 | 何时阅读 |
|---|---|
references/shot-list-template.md | 规划阶段;将 GAME.md 转换为镜头 |
references/luau-api.md | 编写 shots.json;驱动器和摄像机云台的 API;目标、操作、触发器、预设 |
references/recording.md | 首次拍摄前;校准、同步、回退方案、双玩家镜头 |
references/editing.md | 编辑模块、转场、卡片、字体和表情符号、音频、竖版视频 |
references/roblox-video-specs.md | Roblox 上传限制和内容规则,附带来源 |
references/worked-example.md + example.shots.json | 完整工作示例(一个宠物孵化滚动游戏,“🥚 宠物滚动”) |
脚本
| 脚本 | 用途 |
|---|---|
scripts/TrailerDriver.luau, scripts/CameraRig.luau | 运行时(客户端) |
scripts/build_kit.py | rbxmx 工具包、eval 代码片段、内联载荷回退、服务器代码片段、镜头列表 |
scripts/record.py(record.sh 封装) | 窗口、校准、镜头、拼接、清理 |
scripts/edit.py | 构建剪辑版本、预览卡片、列出字体 |
scripts/qa.py | 片段和最终检查、联系表 |
scripts/check_luau.sh | 使用 Roblox 全局变量前导进行 luau-analyze(无需安装 Roblox 类型定义即可运行) |
修改脚本后验证:python3 -m py_compile $SK/scripts/*.py 和 $SK/scripts/check_luau.sh $SK/scripts/*.luau。
已知缺陷(遇到时在此修复)
- 驱动程序无法点击 GUI 按钮。可使用按钮调用的 Remote(
invoke),如同孵化镜头的做法。 - 从标签获取的固定
localOffset是首次猜测;预计在每次镜头的首次拍摄后需要进行调整。 - 玩家摄像机不支持鼠标滚轮缩放。可使用
look.dist在节拍之间改变距离。 - 服务器设置无法
require实时游戏模块:execute_luau/eval_server_runtime获取的是全新的 require 缓存(2026-10-11 在宠物孵化游戏上实测:PlayerState.all()在玩家已加载时仍为空)。将设置放在一个RunContext=Server Script中,该脚本在工具包旁边导入,并暴露一个 BindableFunction,让server代码片段:Invoke它。模式:一个TrailerHook脚本(仅用于预告片,从不保存在位置中),该脚本从游戏服务器 VM 内部require游戏自身的模块,并创建ServerStorage.TrailerHook(BindableFunction,:Invoke(cmd, args) -> (ok, result)),为每个设置步骤提供一个小的命令(给予金币、添加指定稀有度的物品、使计时器就绪、强制下一次滚动的概率、restore)。它会保存它更改的每个配置值,并在restore和脚本被销毁时恢复它们。使用与build_kit.py打包工具包相同的方式将其打包成一个.rbxmx。 - 在 1470x956 pt 屏幕上,带有 Explorer/Properties 面板的 Studio 视口比例约为 1.26:1;在校准前隐藏面板(或通过 View > Full Screen 进入全屏),否则 16:9 裁切会丢弃三分之一的画面。