对于专业开发工作室,设置第三方工具和投资于自动化可以显著提高开发者的生产力。Roblox的云优先方法有许多优点,但将开发工作流程的某些部分移出云端可以帮助更大的团队跟踪变化,审查代码,并使用他们已经熟悉的语言和工具。
- 如果您只是想使用外部文本编辑器或将代码保留在版本控制中,脚本同步是一个很好的选择。
- 如果您想将整个项目作为一组本地文件进行管理,这个页面涵盖了一些工具和策略。
同步问题
从根本上讲,使用外部工具与Roblox的结合是一个_同步_问题:
- 您希望您的Roblox实例作为磁盘上的文件存在,以便您可以使用自己的工具进行操作。
- 完成工作后,必须将文件重新合并回Roblox项目中。
- 如果其他人在此期间更改了这些相同的文件,您必须处理任何冲突。
为了让整个解决方案感觉无缝和自动,您需要 a) 监听文件的更改 b) 将这些更改合并回Studio。
与Roblox的云优先方法不同,Rojo允许采用“文件系统优先”的方法。它在您的机器上运行一个服务器,与Studio插件通信,以同步您的文件和Studio数据模型。
使用Rokit安装Rojo
您可以手动下载并运行Rojo二进制文件,但这种方法存在团队中的不同开发者使用不同Rojo版本的风险。一个更好的解决方案是使用像Rokit这样的工具链管理器,它使用一个配置文件—一个仓库和版本的列表—使安装和升级过程在机器之间保持一致。
由于它管理的是您的基础开发环境,而非项目中的包,因此Rokit更像是nvm而不是npm,但这种比较并不完美。一个简单的rokit.toml文件看起来像这样:
[tools]
rojo = "rojo-rbx/rojo@7.6.1"
wally = "upliftgames/wally@0.3.2"
lune = "lune-org/lune@0.10.4"
然后您使用rokit install安装这些工具。除了全局的rokit.toml文件外,Rokit支持每个项目文件,因此您可以轻松地在不同项目中使用不同版本的Rojo、Wally或任何其他工具,并使整个团队保持在相同版本上。
当一个工具发布新版本时,您可以在.toml文件中显式提高版本号,使用Rokit执行升级,测试新版本,并在出现问题时降级。有关命令和安装说明,请参见Rokit。
运行Rojo
在您使用Rokit安装Rojo之后,您实际上安装的是Rojo服务器。下一步是为Roblox Studio安装Rojo插件。
您可以从创作者商店安装它,或使用以下命令在本地安装:
rojo plugin install
然后生成您新游戏的项目结构并构建它:
rojo init my-new-experiencecd my-new-experiencerojo build -o my-new-experience.rbxl
或者,您可以移植现有游戏。无论哪种方式,在您拥有项目后,启动Rojo服务器:
rojo serve
在Roblox Studio中,打开您刚构建的.rbxl文件,打开Rojo插件,并连接到您现在正在运行的服务器,此时您可以开始在您喜欢的文本编辑器中进行更改,并观看这些更改自动同步回Studio。


Rojo项目对文件有特定的命名要求,许多配置选项和一些限制,所有这些都在Rojo文档中进行了涵盖。
包管理器
Roblox有一套强大的API,但如果您想以一致、可复制的方式利用社区软件包,您需要一个包管理器。Wally是一个流行的选择。您可以通过Rokit安装它,就像安装Rojo一样。
在您游戏的Rojo目录中,运行wally init。然后将所需的包添加到wally.toml。该文件可能如下所示:
[package]
name = "my-home-directory/my-new-experience"
version = "0.1.0"
registry = "https://github.com/UpliftGames/wally-index"
realm = "shared"
[dependencies]
react = "jsdotlua/react@17.2.1"
react-roblox = "jsdotlua/react-roblox@17.2.1"
cryo = "phalanxia/cryo@1.0.3"
然后运行wally install。Wally创建一个Packages目录,并将指定的软件包下载到那里。最后一步是将Packages目录添加到Rojo,以便其内容同步回Roblox。打开default.project.json并添加路径。为了简单起见,这个示例将整个目录添加到ReplicatedStorage,这样所有软件包都对所有脚本可用,但您可能更喜欢将特定软件包添加到ServerScriptService或StarterPlayerScripts:
{
"name": "my-new-experience",
"tree": {
"$className": "DataModel",
"ReplicatedStorage": {
"Shared": {
"$path": "src/shared"
},
"Packages": {
"$path": "Packages"
}
},
...
}
}
然后,您可以像任何其他ModuleScript一样在您的脚本中要求软件包:
local Players = game:GetService("Players")local ReplicatedStorage = game:GetService("ReplicatedStorage")local React = require(ReplicatedStorage.Packages.react)local ReactRoblox = require(ReplicatedStorage.Packages["react-roblox"])local handle = Instance.new("ScreenGui", Players.LocalPlayer.PlayerGui)local root = ReactRoblox.createRoot(handle)local helloFrame = React.createElement("TextLabel", {Text = "Hello World!",Size = UDim2.new(0, 200, 0, 200),Position = UDim2.new(0.5, 0, 0.5, 0),AnchorPoint = Vector2.new(0.5, 0.5),BackgroundColor3 = Color3.fromRGB(248, 217, 109),Font = Enum.Font.LuckiestGuy,TextSize = 24})root:render(helloFrame)
像大多数其他软件项目一样,目标是贡献者可以克隆一个仓库,安装Rokit,运行几个命令,并拥有与团队其余部分相同的开发环境。
版本控制
在您的计算机上拥有一组普通文本文件解锁了各种能力,但主要的是_版本控制_。您可以将文件存储在Git或Mercurial仓库中;在GitHub、GitLab或Bitbucket托管远程仓库并审查代码更改;并使用您喜欢的任何文本编辑器。
Visual Studio Code和Cursor拥有最大数量的扩展生态系统,但Sublime Text、Notepad++和Vim都是流行的选择。无论您选择哪个编辑器,匹配Studio脚本编辑器的功能都需要一些扩展。
您还可能考虑添加:
- 一个像selene这样的代码检查工具,以捕捉常见问题并强制执行编码标准
- 一个像StyLua这样的代码格式化工具
- 一个像Luau Language Server这样的语言服务器,提供自动完成功能、类型检查等
撤销一切
由于第三方工具将更改同步回Roblox Studio,而非替代它,因此此工作流程的任何部分都不涉及锁定。在任何时候,您都可以停止使用这些工具中的一个或全部,回到仅在Studio中编辑游戏。缺乏风险使尝试第三方工具特别具有吸引力。