SuperAPI AI 工具集

roblox-studio-emulation

测试与质量

查看项目

更新于 10-17 16:13

技能介绍

该技能面向 Roblox 游戏测试场景,解决 solo playtest 无法覆盖的两类条件:设备模拟与多人功能验证。

一、设备模拟(移动端/平板/触屏) Roblox Studio 不向 macOS 辅助功能暴露窗口,因此无法直接调整窗口尺寸;但它暴露完整菜单栏,可通过 osascript 驱动 Test 菜单。使用前用户需在“系统设置 → 隐私与安全性 → 辅助功能”中为终端或宿主应用授权,否则会报 osascript 不允许辅助访问(-1719)。示例命令先激活 Roblox Studio,再通过 System Events 点击进程 RobloxStudio 的 Test 菜单中 Device Emulator 项;进程名必须是 RobloxStudio。 点击后不要假定生效,应开始 Play 并读取 workspace.CurrentCamera.ViewportSize 与 UserInputService.TouchEnabled:桌面环境约为 1920x1080 且 TouchEnabled=false,模拟环境为设备尺寸视口且 TouchEnabled=true;TouchEnabled=true 表示触屏专属代码路径(摇杆避让、触屏布局分支、POS_SHOWN 偏移等)已生效。 Test 菜单中可用项包括 Device Emulator(切换模拟)、Controller Emulator 与 Player Emulator(手柄/玩家状态模拟)、Start Test Session(启动测试会话)、Add Clients(Play Solo 下禁用,测试会话内可用)、Toggle Client View、Pause Client、End Session(多客户端控制)。点击前可枚举并检查菜单项启用状态。 限制:选择具体设备(iPhone 与 iPad 等)使用窗口内下拉框,未被辅助功能暴露,只能使用当前已选设备;若需特定宽度,请用户先设置一次,窄屏手机最容易暴露布局问题。切换模拟器会结束当前 Play 会话并可能断开 MCP 连接,需用 list_roblox_studios → set_active_studio 重新指向,再 start_stop_play。测试完成后应关闭模拟,否则后续截图都是触屏设备。

二、不开第二个客户端验证多人功能——直接触发真实 Remote 此方式通常比启动多客户端会话更快更精确。Server VM 与 Client VM 共享 DataModel,Server VM 中 FireClient 能到达真实客户端模块,驱动信号处理、缓存状态与 UI 刷新。 示例:在 Server VM 中 require ReplicatedStorage 下共享的 Remotes 模块,取第一个玩家,用 Remotes.event("PartyUpdated"):FireClient(plr, {...}) 模拟服务端通知加入了某队伍。随后在 Client VM 断言可观察实例状态,不要断言模块内部状态(跨 VM require 得到的是幻影副本):遍历 CollectionService 标记为 Plot 的实例,统计启用的 PartyPrompt 数量。 应测试往返:先触发“加入”状态并断言,再触发“离开”状态(FireClient(plr, nil))并断言恢复。单向测试会掩盖卡死状态,例如提示框永久隐藏会让该功能对该玩家失效。

三、伪造前置条件 客户端写属性足以搭建场景,因为客户端代码读取同一属性,且 GetAttributeChangedSignal 本地触发。例如在 Client VM 中把 Plot1 的 OwnerUserId 属性设为 99999999,运行测试后必须清理为 nil。 当代码要求被伪造用户是真实在线 Player 时,此方法无效;例如轮询 Players:GetPlayerByUserId(owner) 并拆除不通过检查内容的逻辑会立即撤销设置,表现为创建的东西一秒内消失。替代方案:使用 Test ▸ Start Test Session ▸ Add Clients 启动真正第二玩家;或在 Client VM 中用合成输入对纯逻辑做表测,逐字镜像已发布的守卫/分支,例如对 nil 负载、空字符串、无效 base64、过短缓冲区、有效缓冲区等用例断言 blocked 是否符合预期,并报告 N/N。该结果是真实可报告的,但须明确它验证的是逻辑而非完整渲染路径。

四、如实报告 每次都要区分三种状态:Verified live(实际驱动并观察效果)、Logic-verified(用合成输入表测分支,完整路径未测)、Untested(说明未测及所需条件)。绝不能把“能编译且看起来正确”报告为已验证。