对于许多开发人员,适应 Roblox 脚本的基本挑战是文件位置和 Script.RunContext 属性的重要性。根据脚本类输入、浏览器中的位置和运行上下文,脚本可以采取非常不同的行为。某些方法调用可能会失败,您体验中的对象可能无法访问或脚本可能不全部运行。
这种复杂性的原因是 Roblox 体验默认为多人游戏。脚本需要能够仅在服务器上运行、仅在客户端上运行或共享于两者之间。Roblox 平台的演进随着时间的推移进一步加复杂了情况。
脚本类型
Roblox 有三种类型的脚本:
- Script - 位于服务器或客户端上的代码,取决于其位置和 Script.RunContext 属性。
- LocalScript - 仅在客户端运行的代码。没有运行上下文。
- ModuleScript - 您可以在其他脚本中重复使用的代码。没有运行上下文。
当您创建一个 Script 时,其默认运行上下文是 Legacy , 即它是 a) 服务器端脚本和 b) 只在服务器容器中运行,例如 Workspace 或 ServerScriptService 。
- 如果您将脚本的运行上下文更改为 Server ,现在也可以在 ReplicatedStorage 运行,但这不是推荐的。该位置的内容复制到客户端,因此它是服务器端脚本的差劲选择。
- 如果您将脚本的运行上下文更改为 Client ,它可以在 ReplicatedStorage 运行。它还可以在 StarterCharacterScripts 和 StarterPlayerScripts 运行。虽然起始容器会复制到客户端,但原始脚本 和 的复制奔跑,这并不是理想的情况。
要更改运行脚本的上下文,请在 资源管理器 中选择它,并在 属性窗口 中更改值。

建议
使用 Server 和 Client 值为 RunContext 移除了脚本运行的模棱之处,可以帮助保持项目组织。非默认值的最佳使用案例是:RunContext
- 你想从 ReplicatedStorage 或 ReplicatedFirst 运行的客户端脚本。
- 您包含在 模型 和 包装中的服务器或客户端脚本。明确设置运行上下文可以使模型和包在各种位置更可能正常运行。
要在服务器和客户端脚本之间共享代码,请在 ModuleScripts 中使用 ReplicatedStorage 。
在 LocalScripts 、 StarterCharacterScripts 、 StarterPlayerScripts 和 StarterGui 中使用 StarterPack 。
脚本位置
位置 | 描述 :--- | :--- 工作区 | 代表游戏世界。这个位置对直接附加到对象的服务器脚本很有用,可以控制其行为。复制第一个 | 包含在客户端之前复制的对象。该位置非常适合显示加载屏幕所需的绝对最小集合对象和客户端脚本。复制存储 | 包含被复制到客户端和服务器的对象。这个位置非常适合 Class.ModuleScript\|ModuleScripts 你想要在服务器和客户端上使用的东西。Class.LocalScript\|LocalScripts不从这个位置运行,但Class.Script\|Scripts使用Client运行上下文运行。服务器脚本服务 | 包含服务器脚本。此位置非常适合需要访问服务器端功能或对象的脚本,例如游戏逻辑和云存储。服务器存储 | 包含服务器端对象。这个位置非常适合那些不需要在加入体验时立即复制给客户的大型对象。脚本不从这里运行,但您可以在此处存储服务器端 Class.ModuleScript\|ModuleScripts 。StarterPlayer.StarterCharacterScripts | 包含 Class.LocalScript\|LocalScripts 在角色生成时运行的脚本。StarterPlayer.StarterPlayerScripts | 包含通用的 Class.LocalScript\|LocalScripts 脚本,当玩家加入体验时运行。新手指南 | 包含客户端在加载游戏时显示的图形用户界面元素。Class.LocalScript\|LocalScripts这个位置非常适合修改游戏用户界面的脚本,例如添加按钮、菜单和弹出窗口。新手包 | 一般只包含 Class.Tool\|Tools ,但也可以包含 Class.LocalScript\|LocalScripts 用于设置玩家背包。
这张图显示哪些 Explorer 窗口位置可以包含客户端脚本。请记住,ReplicatedFirst 和 ReplicatedStorage 可以包含 Scripts 与 RunContext 的 Client ,而 Starter[] 容器应使用 LocalScripts 。

示例项目结构
植物参考项目显示了您如何在大而复杂的体验中组织代码。
值得注意的是,它如何将大多数代码存储为可重复的 ModuleScripts 在 ReplicatedStorage 和 ServerStorage 中。