Roblox Guidebook知识库
简体中文 ⌄

Studio / ROBLOX

Roblox Studio 客户端与服务器:比较测试中的状态

辨认当前观察的是哪一侧,找到具体对象,并把 Explorer 记录与 Output 对照。使用练习标记、明确记录,以及停止后的检查步骤。

更新日期:

提出准确的状态问题 #

“对象变了”不足以分析问题。先说明在哪里看到变化:客户端画面、服务器层级,还是日志。选择独立原型中无害的元素,例如名为 ContextMarker 的锚定 Part。不要用金币、购买或玩家保存数据作为练习指示器。

本文的问题是:“同一测试中,两侧分别观察到什么属性值?”这与比较多个玩家或验证跨次登录保存不同。先记录 Workspace → ContextMarker,以及一个属性,例如 Color。标记是练习建议;本文没有修改我们的游戏,也没有实际运行 Studio 测试。

启动合适的测试模式 #

在测试菜单中选择 Test 或 Test Here 并启动模拟。文档说明,这些单人模式运行独立的客户端和服务器模拟。Test 会加入角色,Test Here 使用当前摄像机前方的位置。本练习不需要同时打开多个客户端窗口。

不要未经比较就用 Run 替代普通玩家流程:Run 不会加入玩家角色。观察前记录模式和初始条件。如果原型依赖角色,应检查角色是否出现。两个不同模式的记录可能只是启动条件不同,因此先保持一套固定配置。

确认当前观察的一侧 #

单人测试期间使用 Client/Server 切换按钮。它的状态说明当前观察哪一个模拟。读取属性前记录这一侧,切换后再次确认。摄像机靠近同一物品,并不表示上下文相同;相似的世界画面仍然可能属于不同侧。

记录可以标成“Client”和“Server”,保留 Studio 中的名称。没有标注侧别的层级截图,之后容易与其他观察混淆。本文示意图的两个面板表示上下文,不代表实际运行的两名玩家。它们不是 Studio 截图,也不是运行中项目状态的证明。

按完整路径寻找对象 #

在 Client 模式打开 Explorer,找到选定路径。切换到 Server 后检查同一路径和属性。核对父对象与名称:另一个模型中的 ContextMarker 是另一个对象。如果找不到元素,就记录缺失,而不是填写想象中的预期值。

上下文不同,层级也会不同。Roblox 文档展示了客户端 PlayerScripts,以及服务器 ServerScriptService 和 ServerStorage。对象存在于服务器存储,不代表客户端一定可访问。开启 streaming 时,客户端初始也可能只收到部分 Workspace;这与名字拼错是不同的问题。

同一单人测试的两侧打开大图 ↗
原创客户端与服务器上下文示意图,并非项目真实层级。

保存初始的一对观察 #

修改前写下两行:Client、完整路径、观察值;Server、相同路径、观察值。加入观察时间或场景步骤。没有实际读取两边之前,不要宣布数值一致。本文表格提供记录格式,并不是我们已经完成的测试日志。

如果初始就不一致,先检查是否有现有脚本修改属性,或者是否比较了不同对象和时间。不要在尚未解释的初始状态上继续增加新行为。独立而简单的原型更适合练习,因为可以辨认哪些因素可能影响标记的所选属性。

观察记录打开大图 ↗
原创记录卡片:需要在自己的测试中读取数值。

只改变一件事再比较 #

在独立练习测试中选 Client,通过 Properties 只编辑标记的一个观察属性。立即记录修改发生在哪一侧,再读取两侧值。目的是区分操作位置与观察位置,不是证明 Roblox 所有属性都遵循一个相同规则。

停止测试,恢复初始条件,再单独比较 Server 侧修改。不要把两个变化混在没有记录的流程里:脚本、延迟或下一次编辑都可能影响观察。结果与预期不同,应保留两侧记录和条件,而不是根据一次颜色变化就判定复制损坏。

与 Output 对照 #

打开 Output,注意消息来自哪一侧。Roblox 文档使用蓝色标记表示客户端、绿色表示服务器;ModuleScript 消息的侧别取决于调用者。颜色是辅助线索,但分析还需要消息内容,以及指向来源的路径。

如果原型已有诊断输出,把消息时间和对象与 Explorer 记录对照。只有“完成”而没有相关侧别或值的消息,说明不了多少。在虚构案例中,界面显示“已选择”,但日志针对另一个对象。文字相似不能证明服务器确认了这一次操作。

检查脚本类型与位置 #

缺少预期消息时,查看脚本类型、所在位置,以及 Script 的 RunContext。一个图标或 Script 名称不能单独决定执行侧。Roblox 的位置指南说明,Script 根据上下文与位置可在客户端或服务器执行,LocalScript 则属于客户端。

不要为了出现 Output 消息而随意移动正常工作的脚本。先保存路径和设置,再与官方位置指南比较。ModuleScript 还需要考虑调用者。移动代码可能产生额外执行或新问题,所以每次变更都应单独观察,而不是连续尝试后只记最后结果。

检查项目重要原因
Script位置与 RunContext
LocalScript客户端上下文和适当位置
ModuleScript调用模块的一侧

区分停止与保存 #

Stop 结束模拟,并将对象恢复到测试之前的状态。停止后在编辑模式再次检查初始标记。只在模拟中看到的变化,不会自动成为已保存的项目修改。记录编辑实际发生的位置,不要从暂时画面推断永久保存。

本练习没有验证 DataStore、购买,或重新进入已发布游戏后的状态。成功比较两侧上下文,也不证明数据跨会话保存。那些问题需要有适当来源和条件的独立场景。不要在颜色观察记录中加入未经检查的永久保存结论。

写出有边界的结论 #

记录测试模式、修改侧、两侧观察、路径、属性、顺序,以及对应 Output 消息。结论应具体:“这一步,在这一侧观察到了这个值。”另列未检查的问题,例如其他客户端、网络、重新进入或真实游戏逻辑。

修正后,用相同初始条件重复同一场景。如果问题是其他玩家能看到什么,应另做 Server & Clients 测试;切换按钮不能代替多人检查。本文提供原创方法和教学示意图,不声称实际 Studio 结果、游戏修改或复制测量。

记录保存内容
启动模式和初始条件
修改侧别、路径与一个属性
观察两侧与 Output 消息
结论边界尚未检查的问题

原始资料

Roblox Creator Hub — Studio testing modes
Roblox Creator Hub — Client-server runtime
Roblox Creator Hub — Script types and locations