對於專業的開發工作室來說,設置第三方工具並投資於自動化可以顯著提高開發者的生產力。Roblox的雲端優先方法有很多優勢,但將開發工作流程中的某些部分移出雲端可以幫助較大的團隊隨著時間跟踪變更、審查代碼,以及使用他們已經熟悉的語言和工具。
- 如果你只想使用外部文本編輯器或保持代碼在版本控制中,Script Sync 是一個很好的選擇。
- 如果你想將整個專案管理為一組本地文件,這頁面涵蓋了一些工具和策略。
同步問題
從本質上講,與Roblox一起使用外部工具是一個_同步_問題:
- 你想要你的Roblox實例存在於磁碟上的文件中,以便你可以使用自己的工具進行處理。
- 你必須在完成工作後將文件送回到你的Roblox專案中。
- 如果在此期間其他人更改了這些相同的文件,你必須處理任何衝突。
為了讓整個解決方案感覺無縫且自動化,你需要 a) 監聽文件的變更和 b) 將這些變更整合回Studio。
Rojo 提供了一種“文件系統優先”的方法,而不是Roblox的雲端優先方法。它在你的機器上運行一個伺服器,與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插件。
你可以從Creator Store安裝,或者使用以下命令本地安裝:
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一樣require這些包:
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中編輯你的遊戲。缺乏風險使得實驗第三方工具特別吸引人。