对于专业的开发工作室,设置第三方工具并投资于自动化可以显著提高开发人员的生产力。Roblox的云第一战略有很多优势,但将某些部分的开发工作流程外的云端中,可以帮助大型团队跟踪更改、查看代验证码和使用与它们熟悉的语言和工具。
同步问题
在核心上,使用 Roblox 与外部工具的同步问题是一个 sync 问题:
- 您想要您的 Roblox 脚本存在为 .luau 文件在盘上,以便您可以使用自己的工具在它们上工作。
- 你必须将你的文件重新加入 Roblox 项目,在你完成它们的工作后。
- 如果有人在那之后更改了那些相同的文件,你必须处理任何冲突。
要实现整个解决方案的无缝和自动运行,您需要 a) 听取文件的更改,b) 将这些更改集成到 Studio 中。 在其他 words, 您需要一个服务器和一个 Studio 插件,这是如何 Rojo 解决此问题。
与 Roblox 的云第一方法不同,Rojo 允许“文件系统第一”的方法。它将所有脚本文件在您的项目中的“文件系统”文件中提取。然后它运行服务器。 罗红o 插件连接到服务器以同步这些文件与 Studio。
安装 Rojo 使用 Foreman
您可以手动下载并运行 Rojo 二进制,但该方法会在您的团队中使用不同版本的 Rojo 来运行不同的开发人员。 更好的解决方案是使用 Foreman 等工具管理器,该工具使用配置文件—列表 of 个仓库和版本—来在机器上的安装和升级过程一致。
因为它管理您的基础开发环境,而不是您项目内的包裹,Foreman 更像 nvm 而不是 npm,但比较不完美。一个简单的 foreman.toml 文件看起来像这样:
[tools]
rojo = { github = "rojo-rbx/rojo", version = "7.4.1" }
wally = { github = "UpliftGames/wally", version = "0.3.2" }
然后您使用 foreman install 安装这些工具。 除了一个全球 foreman.toml 文件外,Foreman 支持 per-project 文件,因此您可以轻松使用不同版本的 Rojo、Wally 或任何其他工具为不同项目和保持您的整个团队在同一版本。
当工具发布新版本时,您 then explicitly 将版本号在您的 .toml 文件中,使用Foreman 进行升级,测试新版本,并在下grade 如果它导致任何问题。对于命令和安装说明,请参阅 Foreman 。
运行 Rojo
在你安装了Foreman后,你真正安装的是Rojo服务器。下一步是为 Roblox Studio 安装 Rojo 插件:
rojo plugin install
然后为您的新体验生成项目结构,并将其生成:
rojo init my-new-experiencecd my-new-experiencerojo build -o my-new-experience.rbxl
或者,您可以port an existing experience。 无论如何,在您有项目后,请启动 Rojo 服务器:
rojo serve
在 Roblox Studio 中,打开您刚刚创建的 .rbxl 文件,启动 Rojo 插件,然后连接到您正在运行的服务器,从而开始在您的首选文本编辑器中进行更改,并且自动同步回到 Studio。
Rojo 项目有一些命名要求对文件、数个配置选项和一些限制,这些都在 Rojo 文档 中讨论。
包裹管理器
Roblox 有一个强大的 API 包,但如果您想使用社区软件包在一致的、可重复的方式使用,您需要一个包管理器。Wally 是一个流行的选择。您可以通过 Foreman 安装它,就像 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.1.0"
react-roblox = "jsdotlua/react-roblox@17.1.0"
cryo = "phalanxia/cryo@1.0.3"
然后,运行 wally install 。 Wally 创建一个 Packages 目录,并从指定的包裹下载它。
{
"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)
与大多数其他软件项目类似,目标是让贡献者克隆一个仓库,安装 Foreman ,运行几个命令,并且与团队成员一样拥有开发环境。
版本控制
有一些文本文件在您的电脑上有一个集合的文本文件,可以解锁各种功能,但其中的主要功能是版本控制。您可以将脚本和配置文件存储在一个Git或Mercurial仓库中; 在2>GitHub2>、5>G
Visual Studio Code 有最大的扩展生态,但 Sublime Text、Notepad++ 和 0> Vim0> 都是流行选择。无论您选择哪个编辑器,匹配 Studio 脚本编辑器的功能需要一些扩展。
你还可能考虑添加:
- 像 selene 这样的语种,用于捕捉常见问题并强制编码标准
- 像 StyLua 这样的代码格式
- 像 Luau 语言服务器 这样的语言服务器为自动完成、类型检查等提供
- 打开云端脚本(不同步到 Studio) 来更新发布的体验或重新启动服务器
资产
此页面上的工具大多数适用于脚本; 3D 艺术家已经使用外部工具,例如 Blender 和 Maya,存储源文件在版本控制中,并导入他们的创作到 Studio。 在您有 Studio 素材后,我们建议您使用 包 whenever 可能。
Roblox 实现包裹跟随许多相同的原则,例如此页面上的工具:一个中央存储库,拥有版本记录,提供一种无缝的方式来保持所有版本的资产同步。有关它们如何改善您的工作流程的更多信息,请参阅包裹。
撤销所有
因为第三方工具通过更改回到 Roblox Studio 而不是替换它,因此,这个工作流程中的任何部分都不会包含锁定。 随时您都可以停止使用其中一个或所有这些工具,然后返回 Studio 专属编辑您的体验。由于缺乏风险,使用第三方工具的风险特别有吸引力。