Roblox Guidebook知识库
简体中文 ⌄

Studio / ROBLOX

Roblox Studio 双玩家测试:怎样组织有效观察

在教学项目中启动两个客户端,分别记录 A、B 与服务器的观察。区分初始状态、个人与共享结果、相邻操作、迟到回复、重复、重生和新一轮测试。

两个客户端与独立服务器打开大图 ↗
原创观察示意图。A/B 是日志标记,不保证测试玩家名称;这不是 Studio 截图。
更新日期:

一次运行,三个观察位置 #

两个角色站在一起,不代表多人机制已经通过测试。客户端 A 可能显示漂亮的结果,B 仍显示旧物体,而服务器保留另一种状态。本指南帮助安排观察,不会建立奖励系统,也不是 RemoteEvent 通用安全方案。

请使用自己的独立教学项目副本。只有出生点的简单场景足以检查启动;交互行为必须在项目中已经实现,才能进行对应检查。如果原型具备这些元素,选择一个共享物体和一个个人界面。观察过程中不要临时发明新规则。为撰写本文,没有运行 Studio,也没有测试网站作者的五款游戏。下面提供的是操作计划与空白记录,不是已经完成的实测报告。

1. 先写一份测试用例说明 #

记录项目版本、模式、两个客户端、选定物体和准备完成的条件。例如:两个角色已经出现且能移动,共享物体可见,需要的面板能够打开。按照实现确定物体初始值以及 A、B 的位置。初始值未知时先查清,不能把偶然看见的颜色直接称为正确状态。

把预期与观察分开。“A 改变共享物体,B 看见变化”只是要求,并不是证据。如果 A 的帮助面板只属于 A,也应事先写明。规定允许怎样重复操作,以及如何恢复初始状态。第一轮只选一个动作即可。多个菜单、任务和物体同时变化,会让差异来源难以判断。精确的用例说明使另一个开发者能够按同样条件重做,而不用猜作者当时的想法。

2. 根据问题选择模式 #

单人 Test/F5 会加入角色;Run/F8 在没有角色的情况下运行场景。两客户端检查需要 Server & Clients。当前官方文档把测试控件放在 Studio 的 mezzanine 左侧。请参考这个布局,不要因为旧教程提到某个标签页就假设它仍适用。

单人运行适合先检查场景是否准备好。其中的 Client/Server 切换只是改变同一次单人测试的观察端,不会生成第二位玩家。本指南需要的独立客户端来自 Server & Clients。Team Test 是与协作者共同测试的另一套流程,进行这里的本地练习不必使用。先说明要回答的问题,再选择模式;后面的表格将各模式的用途与限制分开。

模式本轮用途边界
Test / F5带角色的单人准备检查不会产生第二位玩家
单人测试中的 Client / Server同一次单人运行的两个观察端不是两个独立客户端会话
Run / F8无角色运行场景不能代替两位玩家的输入
Server & Clients · 2 · Play/F7两个客户端与服务器,记录 A/B/S本地模拟,不是公开游戏测试

3. 确认启动的是两个客户端 #

在测试下拉菜单中选择 Server & Clients,把客户端数量设为 2,然后按 Play 或 F7。Studio 会打开独立会话:一个模拟服务器,以及每个客户端各自的会话。等启动完成后再执行动作。原本的编辑窗口不是额外玩家,桌面上窗口数量也不能单独证明玩家组成正确。

在笔记中把两个客户端标为 A、B,服务器标为 S。确认每个客户端控制哪个角色,并在服务器的 Players 服务中检查两份 Player 实例。如果 Explorer 没有显示该服务,使用其右键菜单中的 Show Services…。记录实际出现的测试玩家名称,不承诺一定叫 Player1、Player2,也不把模拟玩家说成真实账户。启动不完整时,先修正会话组成,再开始观察案例。

4. 准备观察窗口,不增加脚本 #

通过 Window 打开 Explorer 与 Output;当前文档也介绍了它们各自的工具栏入口。Explorer 用来查看具体物体及其属性,Output 用来保留错误与项目已经输出的消息。Show Context、Show Timestamp 和必要时的 Show Source 能帮助保存消息来源和顺序。本课不要求添加新脚本。

每条记录都注明 A、B 或 S。LocalPlayer 指当前客户端的玩家,服务器处理的是会话中的玩家;只写“玩家”容易混淆。保存错误之前不要用过滤器把它隐藏。Output 没有消息,不代表操作没有发生:原型可能根本不打印。证据不足就记录不足,不要补出想象中的结论。额外诊断改动应在初始轮次记录完成后单独讨论。

5. 分别记录三个初始状态 #

第一次输入前,制作三份独立记录。A:角色位置、看见的物体、个人面板状态。B:从 B 视角记录同样内容。S:相关物体与服务器值、Players 成员和可用日志。不能把服务器值复制进 B 的观察格,然后当成 B 已经看见了它。

共享结果不一定对应完全相同的画面。相机、个人面板与已加载区域可能不同。使用 streaming 的项目中,客户端缺少远处物体未必就是故障。先准备可比较的观察条件:把两位角色放在选定物体附近,记录真实可用的内容。测试途中在服务器 Explorer 中移动物体,以得到想要的画面,属于另一种干预和新的初始条件,不能悄悄当成普通观察。

分别记录 A、B、S打开大图 ↗
原创空白日志图。横线不表示成功;真实观察应在自己的测试完成后填写。

6. 先轮流执行,再讨论冲突 #

让 A 执行一个预先选定的动作,B 先只观察。记录 A 的界面反应、服务器状态和 B 看见的结果,然后对照要求。发现差异时先完成记录,再修改代码;否则观察来自旧版本,结论却来自新版本,无法复现。

恢复约定初始状态,再交换角色:B 操作,A 观察。共享规则可能本来就会改变两端的可见状态,这并不自动表示异常。反过来,如果帮助面板被定义为个人界面,A 打开它就不应同时打开 B 的面板。两种预期都来自你的机制说明。双客户端的价值是检查这种区分,而不是强求每个像素都一致。没有对应机制的项目应标为不适用,不要编造测试结果。

7. 准确描述时间接近的动作 #

准备一个 A 操作后 B 很快跟随的案例,再从初始状态重复相反顺序。写清实际输入顺序。一人来回切换窗口,不能保证两个请求在同一个服务器处理时刻抵达。把它称为时间接近的操作,不要声称已证明严格同时发生。

冲突处理策略属于已经实现的机制:可能只允许一次变化,也可能排队,或拒绝第二个动作。提前写明策略,不为本文章临时添加。A 动作后 B 看见变过的物体,本身不是失败。将观察序列与选择的规则对照。精确并发需要另一个受控案例;两次快速点击并不证明所有竞争情形都经过检查。记录顺序、状态及回复,比笼统写“同时点击正常”更有帮助。

8. 迟到回复与再次执行分开 #

如果现有实现能够标识请求及其结果,记录两者关联。检查迟到回复会不会覆盖另一个较新动作的显示。没有收到结果表示未知,并不自动表示拒绝。能否安全重复,由机制的实际约定决定,而不是由按钮是否方便点击决定。

Network Simulator 只在单独的受控轮次使用,并记录两个方向的设置。这是 Studio 的 beta 工具,先查当前启用说明。选择预设只是准备参数,需要 Apply 才生效。慢慢切换窗口并不模拟网络延迟。完成后恢复并应用先前记录的基线:Reset 准备的是 Ideal Fiber,不是零附加延迟。该工具不会改变已发布游戏玩家的连接。不能关联请求和结果时,写明观察限制,不承诺重复安全。

9. 重生仍处于同一会话 #

明确完成基础轮次后,使用教学项目现有方法让 A 的角色重生。记录 A 的变化、B 看见的内容,以及 S 保留的状态。新的 Character 并不等于新加入的 Player。CharacterAdded 与角色生成或重生有关,不会自动保证面板、任务或游戏状态保持正确。

再次操作前,重新满足准备条件。根据实现,旧角色引用或本地元素可能需要更新。这里不修复项目,也不增加代码,而是为开发者留下明确可复现的案例。不要把重生称为重新进入,也不要用关闭整个测试来替代它。如果项目禁用了通常的角色加载方式,就使用其已经实现的机制,不要假设所有项目都能自动重生。观察表中的重生与新会话必须保留为两个不同案例。

10. 结束测试与保存文件不同 #

记录结束后,在任意模拟会话中按 End Session,Server & Clients 的全部客户端与模拟服务器都会关闭。单人模式的 Stop 结束测试,并将物体恢复到测试前状态。仅关闭某个窗口或暂停,并不是结束整个检查的通用替代方法。

回到原始编辑项目。如果修改了创作内容,可通过 File → Save to File 保存本地副本。这不是保存玩家进度。运行时世界变化不会自动变成文件编辑。新启动必须重新记录初始状态;使用外部持久化的原型也不因重启而必然获得干净数据,需要另行检查。把观察日志放在项目之外,保留操作顺序与上下文,避免停止后只剩下“好像没问题”的印象。

11. 交付可复现且边界明确的记录 #

有用的记录包括版本、客户端组成、初始状态、具体输入、A/B/S 身份、预期和真实观察。出现差异时附上能够取得的错误及来源,并说明同样起点是否再次出现该差异。没有这些条件,单写“能用”无法让其他开发者可靠重复检查。

本文检查了官方来源和文章结构;图表是原创计划图,不是 Studio 截图,也没有执行真实游戏测试。本地模拟不证明实体手机、公开服务器或全部网络条件下的表现。修复后重做具体问题案例和关联基础轮次,再分别安排真实设备与目标运行环境的检查。一个小而准确的日志让两个客户端成为有效观察点,而不只是桌面上的更多窗口。

案例 / 输入预先规定的标准A:真实观察B:真实观察S:真实观察
初始启动:两端已准备好记录真实可用情况与值,对照用例说明———
A 操作,B 观察按共享规则检查变化,保持独立观察———
恢复后 B 操作,A 观察交换发起者,重复相同标准———
A 打开个人面板(如存在)规则为本地时,B 的面板应保持关闭———
接近的 A → B,再另测 B → A记录顺序,对照预定冲突策略———
重复与迟到回复:单独轮次关联请求/结果,不覆盖另一个新操作———
A 在当前会话中重生检查准备条件、Character 与规定状态———
End Session 后重新启动重新记录组成与初始值,不假设外部数据已清空———

原始资料

Roblox Creator Hub — Studio testing modes
Roblox Creator Hub — Client-server runtime
Roblox Creator Hub — Players
Roblox Creator Hub — Player
Roblox Creator Hub — Explorer
Roblox Creator Hub — Output
Roblox Creator Hub — Network Simulator
Roblox Creator Hub — Place files