对于许多开发者来说,适应 Roblox 脚本的基本挑战是文件位置和 Script.RunContext 属性的重要性。根据脚本类型、在 Explorer 中的位置以及运行上下文,脚本的行为可能有很大不同。某些方法调用可能会失败,游戏中的某些对象可能无法访问,或者脚本根本无法运行。
这种复杂性的原因在于 Roblox 游戏默认是多人游戏。脚本需要能够仅在服务器上运行,仅在客户端上运行,或在两者之间共享。随着时间的推移,Roblox 平台的发展进一步加剧了这种情况。
脚本类型
Roblox 有三种类型的脚本:
- Script - 代码根据其位置和 Script.RunContext 属性在服务器或客户端上运行。
- LocalScript - 仅在客户端上运行的代码。没有运行上下文。
- ModuleScript - 可以在其他脚本中重用的代码。没有运行上下文。
当您创建 Script 时,其默认的运行上下文为 Legacy,这意味着它 a) 是一个服务器端脚本,并且 b) 仅在服务器容器中运行,例如 Workspace 或 ServerScriptService。
- 如果您将脚本的运行上下文更改为 Server,它现在也可以在 ReplicatedStorage 中运行,但这并不推荐。该位置的内容会复制到客户端,因此它不是服务器端脚本的理想位置。
- 如果您将脚本的运行上下文更改为 Client,它可以在 ReplicatedStorage 中运行。它还可以在 StarterCharacterScripts 和 StarterPlayerScripts 中运行。然而,启动容器会被复制到客户端,因此原始脚本和副本都会运行,这是不理想的。
要更改脚本运行上下文,请在 Explorer 中选择它,然后在 Properties 窗口中更改值。

建议
将客户端脚本放入 ReplicatedStorage,并将 RunContext 设置为 Client,与仅客户端的 ModuleScripts 一起使用。
在 Studio 中进行调试时,您可以点击 Output 窗口中的行,并转到 ReplicatedStorage.YourScript(脚本的稳定位置),而不是 Players.YourName.PlayerScripts.YourScript(在运行时脚本复制到的短暂位置)。
将服务器脚本放入 ServerScriptService,并将 RunContext 设置为 Server,与仅服务器的 ModuleScripts 一起使用。
为了在服务器和客户端脚本之间共享代码,请在 ReplicatedStorage 中使用 ModuleScripts。
将最少数量的客户端脚本(例如加载脚本)放入 ReplicatedFirst,并将 RunContext 设置为 Client。要了解更多,请参见 复制顺序。
在 StarterCharacterScripts、StarterPlayerScripts、StarterGui 和 StarterPack 中使用 LocalScripts。
脚本位置
| Location | Description |
|---|---|
| Workspace | 表示游戏的 3D 世界。此位置非常适合直接附加到对象并控制其行为的服务器脚本。 |
| ReplicatedFirst | 包含在其他任何内容之前复制到客户端的对象。此位置非常适合显示加载屏幕所需的绝对最低限度的对象和客户端脚本。 |
| ReplicatedStorage | 包含复制到客户端和服务器的对象。此位置适用于您希望在服务器和客户端上都使用的 ModuleScripts。LocalScripts 不会从此位置运行,但具有 RunContext 为 Client 的 Scripts 会运行。 |
| ServerScriptService | 包含服务器脚本。此位置非常适合需要访问服务器端功能或对象(如游戏逻辑和云存储)的脚本。 |
| ServerStorage | 包含服务器端对象。此位置非常适合那些不需要在客户端加入游戏时立即复制的较大对象。脚本不会从此位置运行,但您可以在此存储服务器端的 ModuleScripts。 |
| StarterPlayer ⟩ StarterCharacterScripts | 包含在角色生成时运行的 LocalScripts。 |
| StarterPlayer ⟩ StarterPlayerScripts | 包含在玩家加入游戏时运行的一般用途 LocalScripts。 |
| StarterGui | 包含客户端在加载游戏时显示的 GUI 元素。LocalScripts 可以从此位置运行。此位置适合用于修改游戏用户界面的脚本,例如添加按钮、菜单和弹出窗口。 |
| StarterPack | 通常仅包含 Tools,但也可以包括用于设置玩家背包的 LocalScripts。 |
此图像显示了哪些 Explorer 窗口位置可以包含客户端脚本。请记住,ReplicatedFirst 和 ReplicatedStorage 可以包含 Scripts,其 RunContext 为 Client,而 Starter[] 容器应使用 LocalScripts。

示例项目结构
Plant 参考项目展示了您如何在大型复杂游戏中组织代码。
特别值得注意的是,它将绝大多数代码存储为可重用的 ModuleScripts,并放置在 ReplicatedStorage 和 ServerStorage 中。