這個頁面包含了幫助有經驗的 Unreal Engine 開發者開始使用 Roblox 的信息,包括基本的導覽、概念比較和兩個平台之間的主要差異。
熟悉環境


Unreal 的 大綱 和 Roblox Studio 的 資源管理器 是在 3D 空間中組織元素的主要窗口。兩者都顯示物件和文件夾的階層結構。然而,大綱 的結構較為平坦且不明確,只顯示 Actors。資源管理器 窗口有著深層嵌套的嚴格結構,顯示所有物件作為階層的一部分,即使是在 Unreal 中被視為組件的物件。
Roblox Studio 的 資產管理器 和 工具箱 與 Unreal 的 內容瀏覽器 重疊。資產管理器 讓您管理遊戲中的所有資產,而 工具箱 讓您訪問您發佈的任何資產。工具箱 還可以讓您搜索 創作者商店 中的資產,這些資產來自 Roblox 或社區,類似於 Unreal Engine 的 市場,但可以直接從 Studio 用戶界面訪問。
哲學差異
Roblox 是一個「模擬引擎」,而不是傳統的遊戲引擎。Unreal 的 Actors 和 Roblox 的 Parts 皆作為基本的構建模塊,但在實際使用中,二者有相當大的不同:
- 物理:在 Unreal 中執行物理模擬,您需要在某些組件(如 StaticMeshComponent)中啟用物理,或通過添加組件到 Actors,如物理約束。在 Roblox 中,物理是內建於 Parts 數據類型中的;引擎自動處理交互。
如果您創建了一個 Actor 和一個 Part,您立刻可以看到區別。Actor 只有位置、旋轉和縮放的信息,而 Part 除了這些信息之外,還有材料和顏色、反射和透明度的值、質量和形狀等更多屬性。當您比較 Unreal 中的 StaticMeshActor 和 Roblox 中的 MeshPart 時,兩者才開始共享相似的屬性。


另一個有用的比較是 Unreal 的 Actor 與 Roblox 的 Model。模型作為一組互相關聯的部件的容器,與 Unreal 中的 Actors 作為組件的容器相同。您需要指定模型的一個部件作為其 主要部件,以定義樞紐點。模型還可以保存腳本、動畫、音效、提示、約束、粒子發射器等。
例如,一個 Unreal 的 Actor 可能有一個 NiagaraComponent,它使用幾個發射器來實現期望的視覺效果,還有一個形狀的網格、一個增加彈性的物理約束和一個用於玩家互動的腳本。在大綱中,您會看到一個名為 SpringyFireball 的單一 Actor。
在 Roblox 中,相應的 SpringyFireball 模型在 資源管理器 窗口中可能看起來像這樣:
Model|- ParticleEmitter|- MeshPart|- SpringConstraint|- ClickDetector| |- Script
Roblox 的預設物理哲學延伸至建構 3D 模型的過程。在 Roblox 中,將多個部件焊接在一起成為一個 組件 是快速建築物體的絕佳方法,因為 Roblox 將焊接的部件視為一個單一的剛體。這種方法在 Unreal 中並不實用。
Roblox 使用名為 studs 和 Roblox 質量單位 (RMUs) 的虛構單位來取代標準的公制單位進行長度和質量的測量。關於近似的公制轉換和使用建議,請參閱 單位。
位置很重要
Roblox 遊戲預設為多人模式,因此 Roblox Studio 包含許多具有特定行為的不同存儲位置。欲了解更多信息,請參見 客戶端-伺服器運行時 和 物件組織。
| Location | Description |
|---|---|
| Workspace | 代表遊戲的 3D 世界。這個位置非常適合直接附加到物件並控制其行為的伺服器腳本。 |
| ReplicatedFirst | 包含在其他任何物件之前複製到客戶端的物件。這個位置非常適合顯示載入畫面所需的最少物件和客戶端腳本。 |
| ReplicatedStorage | 包含複製到客戶端和伺服器的物件。這個位置非常適合您想在伺服器和客戶端上使用的 ModuleScripts。 LocalScripts 不會從此位置執行,但具有 RunContext 為 Client 的 Scripts 會執行。 |
| 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 中,但如果你希望在同一客戶端-伺服器邊界上的腳本之間共享程式碼,則可以將其放在其他地方。
Unreal 沒有不同腳本類型的概念。如果您選擇製作一個多人遊戲,則需要編寫額外代碼以在伺服器和客戶端之間同步遊戲狀態。
在 Unreal 中,許多引擎的功能可以通過擴展內建類別如 UObject、ACharacters、ULevel 和 UWorld 來使用,無論是 C++ 還是藍圖。Unreal 支持自定義事件,但許多類別包含引擎根據場景的自然生命週期自動呼叫的事件。
與 Unreal 的「計時」系統相比,Roblox 腳本則更加事件驅動。您可以通過訂閱服務並監聽更新來訪問相似的引擎功能。
C++ 和 Luau
在腳本編寫方面,Unreal 使用 C++。Roblox 使用 Luau,這是一種源自 Lua 5.1 的腳本語言。
相比 Luau,C++ 整體性能上具有優勢,這可能與您想要構建的遊戲類型有關,也可能不相關。Luau 是漸進式類型的,語法不那麼冗長。然而,在大型項目中,漸進類型可能會引入一些強類型語言(如 C++)所避免的錯誤類別,因此請考慮在 Roblox 腳本中啟用 嚴格類型檢查。
Unreal 還包括一種名為 藍圖 的視覺腳本系統。Roblox 有第三方插件提供類似的功能,但沒有內建的類似系統。
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。這些假設在 Unreal 中並不存在,因此實現將大相逕庭。
資產
Unreal 和 Roblox 都支持以 .fbx 格式導入自定義網格和模型。某些類型的資產可能需要從第三方建模軟體中進行特定的配置和導出設置。欲了解更多信息,請參見以下頁面:
在 Unreal 中,資產導入到您的 內容 目錄中,並能在 內容瀏覽器 中看到。在 Roblox 中,資產導入到您的工作區及 工具箱 或 資產管理器。
Roblox 還提供了一個開源的 Blender 插件,以簡化導入過程,類似於 Blender 工具的 發送至 Unreal 功能。
變換
Unreal Engine 的轉換和 Roblox 的 CFrames 在表示物件的 3D 轉換方面具有相似的用途:
- 兩者都支援複雜轉換的乘法,並擁有用於其他操作的內建方法。
協作
在 Unreal 中,您可以使用像 Perforce 或 SVN 的版本控制系統,通常通過 Unreal 的內建用戶界面來進行。這些版本控制系統使用集中式的「檢出」模型,在一個人工作時鎖定文件。
Roblox 文件都存在於雲端(儘管您可以導出副本),因此 Roblox Studio 提供了內建的協作工作流程,用於同時編輯、組管理、權限、腳本草擬等等。請參見 協作。
插件
類似於 Unreal,Roblox Studio 支持 插件,這可以簡化或讓您對開發過程的各個方面進行額外控制。插件同樣可以在 創作者商店 中獲得,許多是免費的。
術語表
| Unreal | Roblox | 註解 |
|---|---|---|
| Level | Place | |
| Actor | Part 或 Model | 參見 哲學差異。 |
| Blueprint Class | Package | |
| Transform | CFrame | CFrame 不包括縮放信息。請參見 變換。 |
| Outliner | Explorer | |
| Details panel | Properties | |
| Level Viewport | 3D viewport | |
| Content Browser | Asset Manager 或 Toolbox | |
| Landscape Mode | Terrain Editor | |
| PlayerStart | SpawnLocation | |
| Output Log | Output | |
| Marketplace | Creator Store | |
| Menu bar | Toolbar | |
| Plugin | Plugin |