关于 scenario-roblox-vfx-audio
面向 Roblox Studio 开发者的特效与音频技能,使用数据化模板构建视觉效果、客户端播放和音频图,并通过检查与测量验证表现。
主要功能
- 01构建分层粒子、光束与轨迹特效
- 02由服务器验证并向客户端广播效果
- 03检查特效并按时间点捕获画面
- 04连接音频图并测量可听度
- 05制作脚步声与音乐闪避行为
适用场景
- 01为命中与弹道制作多人可见特效
- 02检查特效在播放过程中的画面变化
- 03排查音频图连接或无声问题
- 04按材质配置脚步声并混合音乐
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-roblox-vfx-audio安装后在 Claude Code 中输入/scenario-roblox-vfx-audio确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/copy-ready.mdcritique.mdexpert-notes.mdgui-paths.mdprocedures.mdsources.mdscripts/rbx_vfx_audio.pyscripts/agentkit/vfx-audio/AudioAudit.luauAudioKit.luauVfxAudit.luauVfxKit.luauscripts/agentkit/vfx-audio/runtime/Footsteps.luauFxReplicator.luau详细介绍
Roblox 特效与音频
目标:在 macOS 上使用 Roblox Studio(2026 年 10 月版),通过 scenario-roblox-expert 工具包进行操作。
专业特效一眼就能看清,随后便不再碍眼:分层爆发只发射一次,由服务器决定,再由每个客户端绘制。专业音频则是一张已接线的图,经过验证确认连通并测量后,才会有人聆听。Agent 将特效构建为数据,随时间冻结并捕获,然后通过 Wire.Connected、GetAudibilityFor 和分析器检查音频;混音则由人来评判。如果此处提到的某项同级技能不在你可用的技能中,请让用户安装它(npx skills add scenario-labs/skills --skill <name>);若无人值守,则根据工具架构继续操作并指出这一缺口。
必备背景: scenario-roblox-expert(通道、审查流程、工具包、当前 Roblox 的常见陷阱)。
状态(2026-10-19): Studio 0.743 中,17 项实时测试全部通过(其中两项在 MCP 超时后重跑通过),包括游戏测试和可直接复制的脚本;5 项离线检查全部通过(rbx_check 对模块和每个代码片段均报告 0 个错误;翻页贴图和音频文件检查通过;Lune 弧线数学检查通过)。聆听环节留给人工完成。
方法(专家级提升)
- 分层发射一次,而不是使用一个大精灵图。 叠加五层或更多纹理(高亮点、暗色底层),并从
EmitCount属性中读取数量,一次性发射(Twist VFX,zlKdwujvP2A [00:00:13-00:06:13];MoldySugar,XXCGWREKpo0 [00:00:29])。爆发效果使用Emit,持续尾迹使用Enabled(MoldySugar [00:04:16])。 - 如果能看清闪光的形状,它持续得就太久了。 冲击闪光的 Lifetime 约为 0.05 s,斩击图层为 0.2 到 0.3 s(Twist VFX [00:44:26,00:00:13])。
- 速度定向粒子的 Speed 应为 0.001 到 0.01,绝不能为 0。 “如果速度为零,它就会直接消失”(Twist VFX [00:00:13])。已确认:Speed 为 0 时,
VelocityPerpendicular粒子不会绘制;设为 0.01 时则会绘制。 - 弧形 Beam 要按规则设置,不能凭目测。 半圆需要 CurveSize = 弦长 x 2/3,两端都朝向凸起方向,启用 FaceCamera,仅在弯曲时使用 segments(Twist VFX [00:10:55,00:56:19])。这样中点就会落在半径处(Beam 文档中的 Bezier,已实时验证)。
- 服务器做决定,每个客户端负责绘制。 本地特效只有本地玩家能看到,因此冲击效果需要由服务器及其射线检测来处理(Develuper,TkNZETIu0CM [00:02:15,00:04:42])。将服务器的决定(名称、CFrame,或原点、速度和服务器时间)发送给附近客户端,并由每个客户端克隆模板 [新增]:服务器不持有任何特效实例,客户端按距离进行剔除。
- 世界一片寂静,说明缺少监听器。 没有 AudioListener 或 AudioDeviceOutput,就什么也听不到(Cookie Tech,FminS9nvqJg [00:14:59])。模板场景将
DefaultListenerLocation保持为 Default,且游戏测试中两者均不存在(观察所得)。在编辑模式下设置一次 Camera。 - 每段连接用一条 Wire,然后验证连接。 n 个效果需要 n + 1 条线(ByteBlox,LAYhd_j-thI [00:05:46];Cookie Tech [00:19:35])。断言每个
Wire.Connected均为 true,并确认信号源能到达 AudioDeviceOutput;引脚名称错误或存在循环时,结果会是 false(观察所得)。 - 脚步声要跟随双脚。 在接触帧使用带有
left或right的footstep动画事件,并准备几组材质音效,而不是只用一个循环播放的声音(GnomeCode,PNYtTkMidE8 [00:04:42,00:08:23])。默认 R15 动画没有标记,默认角色声音则是旧版Sound(观察所得):保留步幅回退方案,并静音或替换Running。
首先确定
- 谁必须看到每种效果: 仅施法者(即时绘制的反馈),还是附近的所有人(由服务端验证)。
- 设备: 移动设备将每个发射器限制为每秒 100 个粒子,并会在内存不足时丢弃翻页动画(粒子发射器文档)。
- 参考资料: 效果外观的片段;专家会依据参考资料制作,而不是从零开始(Twist VFX [00:49:09])。
- 音频栈: 新项目使用 Audio API;现有游戏继续使用旧版
Sound(未弃用,差异表第 21 行)。语音聊天开启还是关闭。 - 资源: 使用内置占位资源,或上传 ID。上传需要人工操作(在 Window 菜单或 Home 标签页中打开 Asset Manager);Agent 负责准备和检查文件。
默认设置:模板位于 ReplicatedStorage.FxLibrary,实时副本使用 workspace.Fx 文件夹,DefaultListenerLocation 设为 Camera,AgentKit 模块通过 sync_runtime 同步。
流程
如果不使用套件(只需给出答案,或游戏不会随附此套件),请使用 copy-ready.md 中的独立脚本:复制器、音频图、标记脚步声、单人后期效果、Highlight 受击闪光、延迟测试。
- 设置游戏场景。
VA.sync_runtime(studio)会将 VfxKit、AudioKit、FxReplicator 和 Footsteps 写入为 ModuleScripts;将DefaultListenerLocation设为 Camera(监听器设置)。门槛:模块已就位;AudioAudit.audit(game)不报告no-listener。 - 将模板构建为数据。 每种效果使用一个
VfxKit.build规格:发射器、光束、轨迹、灯光和声音图层,并在属性中设置时间(模板)。明确设置 LightInfluence 和纹理。门槛:VfxAudit错误为 0、警告为 0(审计)。 - 随时间检查。
VA.timeline会将效果冻结在选定时刻,TimeScale设为 0,并逐一捕获;打开缩略图总览,并依据 critique.md 进行评估。门槛:image_checks通过,相邻帧有所不同,第一帧的轮廓清晰可辨,最后一帧没有残留。 - 复制效果。
FxReplicator.server会验证类型、冷却时间和范围,执行射线检测并广播;FxReplicator.client负责播放和剔除(效果复制)。游戏测试门槛:服务端的workspace.Fx始终为 0 个子项;客户端副本在lifetime()后归零;垃圾请求和超出范围的请求会被拒绝;游戏过程捕获结果中能看到投射物及其轨迹。 - 接入音频。 总线通过 AudioFaders 接入一个 AudioDeviceOutput;使用
AudioKit.chain接入效果;3D 声源是在 Attachments 上的 AudioEmitters(音频图)。门槛:所有连线均已连接;AudioKit.paths能到达AudioDeviceOutput;IsPlaying和TimePosition均有变化;分析器能读取电平;GetAudibilityFor符合预期曲线。 - 混合行为。 使用 AudioCompressor 的
Sidechain,在受击音效期间压低音乐音量(闪避);通过标记或步幅触发脚步声(脚步声)。门槛:测得的音量降低值(dB);每段距离的脚步数,以及每种地板材质的设置。 - 将听感检查交给人工。 列出只有人类才能评估的项目(critique.md 中的听感项目),并注明具体场景和收听时间戳。
数值
| 值 | 数值 | 相对于,来源 |
|---|---|---|
| 发射器速率上限 | 每秒 400;移动设备上每秒 100 | 每个发射器(文档) |
| 粒子生命周期上限 | 20 秒 | 引擎(文档) |
| 冲击闪光 | 生命周期约 0.05 秒 | Twist VFX |
| 斩击层 | 生命周期 0.2 至 0.3 秒,速度 0.001 至 0.01 | Twist VFX |
| 层之间的 ZOffset | 0.001 | Twist VFX [00:02:24] |
| 光束半圆 | CurveSize = 弦长 x 2/3(20-stud 弦长:13.33,顶点 10) | 弦长(Twist VFX;实时) |
| 曲线光束分段 | 最多约 50 段;Instance.new 会生成 10 段 | 曲率(Twist VFX;观察所得) |
| 光束纹理重复次数 | Stretch:TextureLength 次;Wrap 和 Static:长度 / TextureLength | 光束长度(Beams 文档) |
| 翻页书贴图 | 1024 x 1024;2x2、4x4 或 8x8;最高 30 fps | 每个纹理(文档) |
| 音频导入 | 小于 20 MB,小于 7 分钟,最高 48 kHz;mp3、ogg、wav、flac | 每个文件(文档) |
| AudioCompressor | Threshold -60 至 0 dB,Ratio 1 至 50,Attack 0.0001 至 0.5 秒,Release 0.01 至 5 秒 | 参考 |
| AudioFader Volume | 0 至 3 | 参考 |
| 默认发射器衰减 | 约为 4 / 距离:30 studs 时为 0.133,90 时为 0.044 | GetAudibilityFor(观察所得) |
| 脚步步幅 | 约 4.4 studs | 默认 R15 以 WalkSpeed 16 奔跑时(观察所得) |
| 脚步音量 | 草地 0.3,默认 0.5 | 按材质设置(GnomeCode [00:08:23]) |
| Ducking 起始值 | Threshold -30 dB,Ratio 8,Attack 0.01 秒,Release 0.3 秒 | [已添加];测得音乐为 -21 dB(测试 L8) |
| 响度目标 | 音乐 -16 LUFS,真峰值 -1.5 dB;单次音效峰值 -1.5 dBFS | [已添加] |
质量门槛
- **可测量:**VfxAudit 和 AudioAudit 无异常;每个
Wire.Connected;paths()能到达输出;播放时分析器RmsLevel大于 0;服务端不保留效果实例;客户端复制回 0;按距离统计脚步次数;音频文件通过check_audio,贴图通过check_flipbook。 - **视觉:**在 Edit 中制作定格帧联络表,从固定摄像机录制随时间变化的播放画面,并使用 critique.md 进行评判。评判前提高 Studio 的 Editor Quality Level(File > Studio Settings > Rendering;MoldySugar,9dQR7FySSLg;gui-paths.md)。
- **听感(仅限人工):**凭耳朵评估平衡、与画面同步的时机、音色、重复造成的疲劳感和削波。
常见错误
| 错误 | 症状 | 修复 |
|---|---|---|
| 面向速度的发射器将速度设为 0 | 粒子完全不显示 | 将速度设为 0.001 到 0.01 |
| 在 LightInfluence 为 1 时提高亮度 | 没有变化(观察结果:1 和 6 相同) | 将 LightInfluence 设为低于 1(TrendyV2,rIXyQ4RAwws [00:02:35]) |
| 使用 Instance.new 创建发射器 | LightInfluence 为 0(观察结果),而 Studio 插入的对象为 1(文档) | 显式设置 LightInfluence |
| Trail 或 Beam 只有一个附件 | 没有绘制内容 | 设置 Attachment0 和 Attachment1 |
| 在服务器上克隆特效 | 特效重复、产生网络开销、无法剔除 | 广播,在客户端上克隆 |
将 Sound 设为 SoundGroup 的父级 | 忽略组音量 | 设置 Sound.SoundGroup(文档) |
AudioPlayer.AssetId | 已弃用 | AudioPlayer.Asset |
| AudioEmitter 位于 Folder 或 Model 下 | 没有声音 | 将其设为 Attachment、部件或 Camera 的子级 |
| Listener 保持为 Default | 播放时 3D 音频无声 | 将 DefaultListenerLocation 设为 Camera |
根据 MoveDirection 播放脚步声 | 使用 Humanoid:MoveTo 时没有脚步声(观察结果) | 使用根部速度 |
使用内置的 explosion01_smoke_main 或 fire_sparks_main 作为替代资源 | 图层不可见:纹理接近黑色(观察结果) | smoke_main.dds、SquareParticle.png |
在 Edit 中编辑 ModuleScript.Source | 旧代码仍在运行(观察结果) | 替换 ModuleScript 实例 |
交接
- 来自 scenario-game-assets 和 scenario-sprite-animation: VFX 纹理和翻页动画帧
(2x2、4x4 或 8x8 网格)。使用
make_flipbook打包,使用check_flipbook检查,然后由人员上传。 - 来自 scenario-audio 和 scenario-elevenlabs: 音效、音乐、语音。运行
prepare_audio(修剪、48 kHz、音量电平)和check_audio,然后由人员上传。 - 来自 scenario-roblox-animation: 动画中的
footstep和命中帧标记。 - 来自 scenario-roblox-gameplay: 命中事件、投射物 ID、起点和速度;此技能负责绘制它们。
- 与 scenario-roblox-networking 协作: 验证远程请求并限制特效请求的速率。
- 交给 scenario-roblox-environment: 环境音轨和用于检验光照效果的参考。光照配置位于该处:暖光配冷色阴影(aq0Fi0R2FAY [00:03:38]),Bloom Threshold 约为 0.03(aq0Fi0R2FAY [00:07:37])。
- 交给 scenario-roblox-performance: 每个场景的发射器、光束和翻页动画数量,以便控制帧预算。
当前 Roblox 备注
- 自 2024-09-10 起,Audio API 为通用 API;
AudioPlayer.Asset取代了AssetId;AudioPlayer 的内部音量在 2025 年翻倍:请重新检查旧音量级别(差异表第 21 行)。 - 参考属性为
SoundService.DefaultListenerLocation(插件安全级别:在编辑模式下设置)。 FlipbookIncompatible显示“Particle texture must be 1024 by 1024 to use flipbooks.”,布局为 None,且会在动画图集上出现(观察所得):这是提示,而非状态。- 将 EditableImage 设为粒子的
TextureContent时没有绘制任何内容,而同一图像在 Decal 上可以绘制(观察所得):请在 Decal 上预览图集。 Lighting.Technology已被取代;照明属于 scenario-roblox-environment。
参考资料
- references/procedures.md:工具包 API,以及每个过程的完整代码、测试和结果。
- references/expert-notes.md:专家判断,附来源和时间戳。
- references/critique.md:截图、图表和人工听感检查的评估标准。
- references/gui-paths.md:完成相同工作的 Studio 菜单和面板。
- references/copy-ready.md:独立脚本,使用通俗名称,无需工具包。
- references/sources.md:所有来源及其 URL 和最佳时间戳。
- scripts/rbx_vfx_audio.py:运行器端辅助工具(时间线、翻页动画、音频文件)。
- scripts/agentkit/vfx-audio/:VfxKit、VfxAudit、AudioKit、AudioAudit、运行时 FxReplicator 和 Footsteps。