Roblox for Unity developers

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡。

此頁面包含幫助經驗豐富的 Unity 開發者開始使用 Roblox 的資訊,包括基本的導覽、概念比較以及兩個平台之間的主要差異。

熟悉環境

Unity 用戶界面,標註顯示各種窗口和面板。 Roblox Studio 用戶界面,標註顯示各種窗口和面板。

Unity 的 層級 窗口和 Roblox Studio 的 資源管理器 是組織 3D 場景中元素的主要窗口:

  • 兩者都允許您管理和組織物件(例如,角色和環境資產)。
  • 兩者都使用樹狀結構來表示物件之間的父子關係。

然而,層級 窗口沒有預定義的結構,而 資源管理器 窗口則有嚴格的結構。可以將 資源管理器 窗口視為 Unity 的 層級 和 專案 窗口的組合,其中 Workspace 文件夾是最具辨識度的元素。

同樣,Roblox Studio 的 資產管理器 和 工具箱 與 Unity 的 專案 窗口重疊。資產管理器 讓您管理遊戲中的所有資產,而 工具箱 讓您訪問您已發佈的任何資產。工具箱 還允許您搜索 創作者商店 中的 Roblox 或社區資產,類似於 Unity 的 資產商店。

哲學差異

Roblox 是一個「模擬引擎」,而不是傳統的遊戲引擎。Unity 的 GameObjects 和 Roblox 的 Parts 都作為在 3D 環境中創建物件的基本構建塊,但實際上,兩者有很大不同:

  • 表示:Unity 中的 GameObjects 是場景中任何物件的高級概念,而 Roblox 中的 Parts 設計用來表示物理物件,如木塊和塑料球,而不是像 Unity 中的原始物件那樣的抽象幾何。
  • 物理:在 Unity 中執行物理模擬時,您需要將 Rigidbody 和 Collider 等組件附加到 GameObject 上。在 Roblox 中,物理內建於 Parts 數據類型中;引擎自動處理交互。

如果您創建一個 GameObject 和一個 Part,您會立即看到差異。GameObject 只有位置、旋轉和縮放。Part 擁有相同的信息——加上材料和顏色、反射和透明度的值、質量和形狀等等。將 Part 轉變為更像空的 GameObject 意味著 移除 許多內建屬性。相反,您可以通過向 GameObject 添加 MeshFilter、MeshRenderer、Collider 和 Rigidbody 組件,使其看起來更像 Part。

從腳本的角度來看,GameObject 最類似於 Roblox 的 Instance,這是所有其他 Roblox 類的基類,但因為您不能(也不可以)創建 Instance 類型的物件,所以這種比較並不特別實用。

另一個比較是 Unity 的 GameObject 與 Roblox 的 Model。模型作為一組互相連接的部件的容器,就像您在 Unity 中為許多 GameObjects 建立父子關係一樣。您指定模型的一個部件作為其 主要部件 以定義樞紐點。模型還可以包含腳本、動畫、音效、提示、約束、粒子發射器等。

例如,Unity 的 GameObject 可能有 ParticleSystem、Physics3D、SpringConstraint 和一個腳本的組件。在層級窗口中,您會看到一個名為 SpringyFireball 的單一 GameObject。檢查器窗口顯示組件和屬性的集合。

在 Roblox 中,相應的 SpringyFireball 模型在 資源管理器 窗口中可能看起來像這樣:

Model
|- ParticleEmitter
|- MeshPart
|- SpringConstraint
|- ClickDetector
| |- Script

Roblox 的物理默認哲學擴展到構建 3D 模型的過程。在 Roblox 中,將多個部件焊接在一起形成一個 組件 是快速構建事物的好方法,因為 Roblox 將焊接的部件視為一個單一的剛體。這種方法在 Unity 中不可用。

Roblox 使用名為 studs 和 Roblox 質量單位 (RMUs) 的名義單位,而不是標準的公制單位來表示長度和質量。關於近似公制轉換和使用建議,請參見 單位。

位置很重要

Roblox 遊戲默認為多人遊戲,因此 Roblox Studio 包含許多不同的存儲位置,具有特定的行為。欲了解更多信息,請參見 客戶端-伺服器運行時 和 物件組織。

LocationDescription
Workspace代表遊戲的 3D 世界。可以運行直接附加到物件並控制其行為的伺服器腳本。
ReplicatedFirst包含在其他任何物件之前複製到客戶端的物件。此位置非常適合顯示加載畫面所需的最小物件和客戶端腳本集。
ReplicatedStorage包含複製到客戶端和伺服器的物件。此位置非常適合具有 Scripts 的 RunContext 為 Client 的客戶端 ModuleScripts,以及您希望在伺服器和客戶端上使用的 ModuleScripts。LocalScripts 不會從此位置運行。
ServerScriptService包含伺服器腳本。此位置非常適合需要訪問伺服器端功能或物件的腳本,例如遊戲邏輯和雲端存儲。
ServerStorage包含伺服器端物件。此位置非常適合不需要在玩家加入遊戲時立即複製到客戶端的大型物件。腳本不會從此位置運行,但您可以在此存儲伺服器端的 ModuleScripts。
StarterPlayer ⟩ StarterCharacterScripts包含在角色生成時運行的 LocalScripts。
StarterPlayer ⟩ StarterPlayerScripts包含在玩家加入遊戲時運行的 LocalScripts。
StarterGui包含客戶端在加載遊戲時顯示的 GUI 元素。LocalScripts 可以從此位置運行。
StarterPack通常只包含 Tools,但也可以包括用於設置玩家背包的 LocalScripts。

腳本編寫

Roblox 遊戲支援三種不同類型的 Luau 腳本:

  • 客戶端腳本

    這些腳本在客戶端運行,伺服器無法看到它們的行為。出於向後相容的原因,這些腳本可以是 LocalScripts 或 Scripts,其 RunContext 值為 Client。客戶端腳本通常位於 ReplicatedStorage、StarterPlayerScripts 或 StarterCharacterScripts 中。

  • 伺服器腳本

    這些腳本在伺服器上運行,客戶端無法看到它們的行為。伺服器腳本的 RunContext 值為 Server,並且通常位於 ServerScriptService 中,該服務的內容不會被複製到客戶端。

  • 模組腳本

    這些腳本是可重用的程式碼片段,會返回一個值,通常是一個函式或表(或函式的表)。為了避免在客戶端和伺服器腳本中重複程式碼,請使用模組腳本在兩者之間共享程式碼和資料。模組腳本通常位於 ReplicatedStorage 中,但如果你希望在同一客戶端-伺服器邊界上的腳本之間共享程式碼,則可以將其放在其他地方。

Unity 沒有不同腳本類型的概念。如果您選擇製作多人遊戲,Unity 使用其網絡庫來指示何時 GameObject(及其腳本)應該僅限於伺服器。

在 Unity 中,許多引擎的功能可以通過 MonoBehaviour 的方法來訪問。例如,為了在渲染循環之前運行代碼,您需要將代碼添加到 Update() 方法中。要處理物理碰撞事件,您需要將代碼添加到 OnCollideEnter() 方法中。

Roblox 腳本更具事件驅動性。您通過訂閱服務並監聽更新來訪問類似的功能。

C# 和 Luau

在腳本編寫方面,Unity 使用 C#。Roblox 使用 Luau,這是一種源自 Lua 5.1 的腳本語言。

與 C# 相比,Luau 是逐步類型的,通常語法不那麼冗長。然而,在較大的項目中,逐步類型可能會引入強類型語言(如 C#)所避免的錯誤類別,因此考慮在 Roblox 腳本中啟用 嚴格類型檢查。

有關腳本語言之間的基本語法差異,請參見 Luau 和 C# 比較。

Luau 代碼範例

以下的 Luau 代碼範例演示了如何在玩家裝備釣魚竿後,監聽用戶輸入(在這個例子中為 E 鍵)並調用其他函數:

local ContextActionService = game:GetService("ContextActionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- 從 ReplicatedStorage 獲取一個返回單個函數的模組腳本
local performSomeAction = require(ReplicatedStorage.performSomeAction)
-- 假設這個腳本是釣魚竿的子物件
local fishingPole = script.Parent
local ACTION_CAST = "Cast"
-- 檢查鍵是否按下,然後調用另一個函數
local function castLine(_actionName, inputState, _inputObject)
if inputState == Enum.UserInputState.Begin then
performSomeAction()
end
end
-- 只有在玩家裝備釣魚竿時才啟用這個動作
fishingPole.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_CAST, castLine, true, Enum.KeyCode.E)
end)
-- 玩家卸下釣魚竿時禁用這個動作
fishingPole.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_CAST)
end)

Roblox 腳本可以相對簡潔,因為 Roblox 有許多內建的假設:一個連接到伺服器的 Player 和 Humanoid 角色,並且可以裝備 Tools。這些假設在 Unity 中並不存在,因此實現會非常不同。

資產

Unity 和 Roblox 都支持以 .fbx 格式導入自定義網格和模型。某些類型的資產可能需要來自第三方建模軟件的特定配置和導出設置。欲了解更多信息,請參見以下頁面:

在 Unity 中,物件導入到您的 Assets 目錄中,並在 專案 窗口中可見。在 Roblox 中,資產導入到您的 Workspace 和 工具箱 或 資產管理器。

Roblox 還提供了一個開源的 Blender 插件,以簡化導入過程。

變換

Unity 的轉換和 Roblox 的 CFrames 在表示物件的 3D 轉換方面具有相似的用途:

  • 轉換和 CFrames 都表示物件在 3D 空間中的位置和旋轉。轉換包括縮放,而 Roblox 使用的 BasePart.Size 屬性並不是 CFrame 的一部分。
  • 兩者都支援複雜轉換的乘法,並擁有用於其他操作的內建方法。

協作

在 Unity 中,您可以使用標準版本控制系統或付費服務(如 Unity 版本控制)進行協作。

Roblox 文件存儲在雲端(儘管您可以導出副本),因此 Roblox Studio 提供內建的協作工作流程,用於同時編輯、群組管理、權限、腳本草擬等。請參見 協作。

插件

類似於 Unity 工具,Roblox Studio 支持 插件,這可以簡化或讓您對開發過程的各個方面有更多控制。插件在 創作者商店 中可用,與資產一樣,許多是免費的。

詞彙表

UnityRoblox備註
場景地點
GameObjectPart 或 Model請參見 哲學差異。
預製件包
變換CFrameCFrame 不包括縮放信息。請參見 變換。
層級資源管理器
檢查器屬性
場景視圖3D 視口
遊戲視圖3D 視口當您測試遊戲時,視口會轉換為遊戲視圖。
專案窗口資產管理器 或 工具箱
地形檢查器地形編輯器
重生點SpawnLocation
控制台輸出
資產商店創作者商店
覆蓋物工具列
工具插件
©2026 Roblox Corporation、Roblox、Roblox 標誌及 Powering Imagination 是我們在美國及其他國家地區的部分註冊與未註冊商標。