mcpField
S
scenario-roblox-vfx-audio

scenario-roblox-vfx-audio

github.com/scenario-labs创意与媒体1.2k57 次安装1 天前更新
代码仓库

关于 scenario-roblox-vfx-audio

面向 Roblox Studio 开发者的特效与音频技能,使用数据化模板构建视觉效果、客户端播放和音频图,并通过检查与测量验证表现。

主要功能

  1. 01构建分层粒子、光束与轨迹特效
  2. 02由服务器验证并向客户端广播效果
  3. 03检查特效并按时间点捕获画面
  4. 04连接音频图并测量可听度
  5. 05制作脚步声与音乐闪避行为

适用场景

  1. 01为命中与弹道制作多人可见特效
  2. 02检查特效在播放过程中的画面变化
  3. 03排查音频图连接或无声问题
  4. 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.md
critique.md
expert-notes.md
gui-paths.md
procedures.md
sources.md
scripts/
rbx_vfx_audio.py
scripts/agentkit/vfx-audio/
AudioAudit.luau
AudioKit.luau
VfxAudit.luau
VfxKit.luau
scripts/agentkit/vfx-audio/runtime/
Footsteps.luau
FxReplicator.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 弧线数学检查通过)。聆听环节留给人工完成。

方法(专家级提升)

  1. 分层发射一次,而不是使用一个大精灵图。 叠加五层或更多纹理(高亮点、暗色底层),并从 EmitCount 属性中读取数量,一次性发射(Twist VFX,zlKdwujvP2A [00:00:13-00:06:13];MoldySugar,XXCGWREKpo0 [00:00:29])。爆发效果使用 Emit,持续尾迹使用 Enabled(MoldySugar [00:04:16])。
  2. 如果能看清闪光的形状,它持续得就太久了。 冲击闪光的 Lifetime 约为 0.05 s,斩击图层为 0.2 到 0.3 s(Twist VFX [00:44:26,00:00:13])。
  3. 速度定向粒子的 Speed 应为 0.001 到 0.01,绝不能为 0。 “如果速度为零,它就会直接消失”(Twist VFX [00:00:13])。已确认:Speed 为 0 时,VelocityPerpendicular 粒子不会绘制;设为 0.01 时则会绘制。
  4. 弧形 Beam 要按规则设置,不能凭目测。 半圆需要 CurveSize = 弦长 x 2/3,两端都朝向凸起方向,启用 FaceCamera,仅在弯曲时使用 segments(Twist VFX [00:10:55,00:56:19])。这样中点就会落在半径处(Beam 文档中的 Bezier,已实时验证)。
  5. 服务器做决定,每个客户端负责绘制。 本地特效只有本地玩家能看到,因此冲击效果需要由服务器及其射线检测来处理(Develuper,TkNZETIu0CM [00:02:15,00:04:42])。将服务器的决定(名称、CFrame,或原点、速度和服务器时间)发送给附近客户端,并由每个客户端克隆模板 [新增]:服务器不持有任何特效实例,客户端按距离进行剔除。
  6. 世界一片寂静,说明缺少监听器。 没有 AudioListener 或 AudioDeviceOutput,就什么也听不到(Cookie Tech,FminS9nvqJg [00:14:59])。模板场景将 DefaultListenerLocation 保持为 Default,且游戏测试中两者均不存在(观察所得)。在编辑模式下设置一次 Camera。
  7. 每段连接用一条 Wire,然后验证连接。 n 个效果需要 n + 1 条线(ByteBlox,LAYhd_j-thI [00:05:46];Cookie Tech [00:19:35])。断言每个 Wire.Connected 均为 true,并确认信号源能到达 AudioDeviceOutput;引脚名称错误或存在循环时,结果会是 false(观察所得)。
  8. 脚步声要跟随双脚。 在接触帧使用带有 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 受击闪光、延迟测试。

  1. 设置游戏场景。 VA.sync_runtime(studio) 会将 VfxKit、AudioKit、FxReplicator 和 Footsteps 写入为 ModuleScripts;将 DefaultListenerLocation 设为 Camera(监听器设置)。门槛:模块已就位;AudioAudit.audit(game) 不报告 no-listener。
  2. 将模板构建为数据。 每种效果使用一个 VfxKit.build 规格:发射器、光束、轨迹、灯光和声音图层,并在属性中设置时间(模板)。明确设置 LightInfluence 和纹理。门槛:VfxAudit 错误为 0、警告为 0(审计)。
  3. 随时间检查。 VA.timeline 会将效果冻结在选定时刻,TimeScale 设为 0,并逐一捕获;打开缩略图总览,并依据 critique.md 进行评估。门槛:image_checks 通过,相邻帧有所不同,第一帧的轮廓清晰可辨,最后一帧没有残留。
  4. 复制效果。 FxReplicator.server 会验证类型、冷却时间和范围,执行射线检测并广播;FxReplicator.client 负责播放和剔除(效果复制)。游戏测试门槛:服务端的 workspace.Fx 始终为 0 个子项;客户端副本在 lifetime() 后归零;垃圾请求和超出范围的请求会被拒绝;游戏过程捕获结果中能看到投射物及其轨迹。
  5. 接入音频。 总线通过 AudioFaders 接入一个 AudioDeviceOutput;使用 AudioKit.chain 接入效果;3D 声源是在 Attachments 上的 AudioEmitters(音频图)。门槛:所有连线均已连接;AudioKit.paths 能到达 AudioDeviceOutput;IsPlaying 和 TimePosition 均有变化;分析器能读取电平;GetAudibilityFor 符合预期曲线。
  6. 混合行为。 使用 AudioCompressor 的 Sidechain,在受击音效期间压低音乐音量(闪避);通过标记或步幅触发脚步声(脚步声)。门槛:测得的音量降低值(dB);每段距离的脚步数,以及每种地板材质的设置。
  7. 将听感检查交给人工。 列出只有人类才能评估的项目(critique.md 中的听感项目),并注明具体场景和收听时间戳。

数值

值数值相对于,来源
发射器速率上限每秒 400;移动设备上每秒 100每个发射器(文档)
粒子生命周期上限20 秒引擎(文档)
冲击闪光生命周期约 0.05 秒Twist VFX
斩击层生命周期 0.2 至 0.3 秒,速度 0.001 至 0.01Twist VFX
层之间的 ZOffset0.001Twist 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每个文件(文档)
AudioCompressorThreshold -60 至 0 dB,Ratio 1 至 50,Attack 0.0001 至 0.5 秒,Release 0.01 至 5 秒参考
AudioFader Volume0 至 3参考
默认发射器衰减约为 4 / 距离:30 studs 时为 0.133,90 时为 0.044GetAudibilityFor(观察所得)
脚步步幅约 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。

参考资料

评论

支持 Markdown