對於不實開發者的 Roblox

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

此頁包含幫助經驗豐富的 Unreal Engine 開發人員開始使用 Roblox 的信息:基本方向、概念比較和兩個平台之間的關鍵差異。

取得方向

Unreal 的出線者和 Roblox Studio 的 勘探者 是在 3D 空間中整理元素的主要窗口。兩者都顯示對象和文件夾的階層。但是,出線者有更平坦、更不定義的結構,只顯示 Actors 。探索器窗口有深層次、嚴格結構,並將所有對象視為層級的一部分,即使是在 Unreal 中被認為是組件的對象。

Roblox Studio 資產管理器工具箱與Unreal內容瀏覽器重疊。資產管理員讓你管理體驗中的所有資產,而工具箱讓你存取已發布的任何資產。工具箱也讓你可以在 Roblox 或社群尋找資產的創作者商店進行搜尋。創作者商店與虛擬引擎市場相似,但您可以直接從工作室使用者介面存取它。

哲學差異

Roblox 是一個「模擬引擎」,而不是傳統遊戲引擎。虛擬 Actors 和 Roblox Parts 兩者都作為基本構建方塊,但在實踐中,兩者相當不同:

  • 代表 : Actors 在 Unreal 是等級中的任何對象的更高級別概念,而 Parts 在 Roblox 設計用於代表物理對象,例如木塊和塑膠球。
  • 物理 :在 Unreal 中執行物理模擬,您需要在特定組件(例如 StaticMeshComponent)內啟用物理,或通過添加組件到 Actors 來添加物理限制。在 Roblox 中,物理學被建立到 Parts 數據輸入中;引擎會自動處理互動。

如果你創建了 ActorPart,你可以立即看到差異。Actor 有少於一個位置、比例轉和縮放。Part 有相同的資訊—加上材料和顏色、反射率和透明度、質量和形狀等等。兩者只有在你在 Unreal 中比較 StaticMeshActor 時才開始分享相似的屬性 (例如將立方體)轉換為 Roblox 的 MeshPart

An example Unreal actor in the Details panel.

虛擬編輯器細節面板
>

An example Roblox part in the Properties window.

Roblox Studio 屬性窗口
>

另一個有用的比較是 Unreal Actor 與 Roblox Model 的比較。模型作為一個容器來容納一組相互連接的零件,以同樣的方式來容納 Actors 在 Unreal 中的零件。您指定模型的零件之一作為其 主要零件 來定義旋轉點。模型也會保存腳本、動畫、音效、提示、限制、粒子發射器等等。

例如,Unreal Actor 可能會有 NiagraComponent 使用多個發射器來實現所需的視覺效果、形狀網格以及添加彈性的物理限制,以及玩家互動的腳本。在概述器中,您看到一個單獨的 Actor 名為 SpringyFireball 的項目。

在 Roblox 中,在探索器窗口中相似的 SpringyFireball 模型可能會看起來像這樣:


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

Roblox 的預設物理學理念延伸到建立 3D 模型的過程。在 Roblox 中,將多個零件焊接在一起形成 裝配 是一種快速構建物品的優良方法,因為 Roblox 將焊接的零件視為單一剛性身體。這種方法在 Unreal 中不實用。

而不是使用標準公制單位來測量長度和質量,Roblox 使用稱為螺柱和 Roblox 質量單位 (RMU) 的想像單位。對於大約的公制轉換和使用建議,請參閱單位

位置很重要

Roblox 體驗的多人模式為預設狀態,因此 Roblox Studio 包含許多不同的儲存位置和特定行為。例如,一個腳本可能在 ReplicatedStorage 中運行,但不會在 StarterPlayerScripts 中運行。了解更多信息,請參閱客戶端-服務器運行時對象組織

位置|說明:---|---工作區|代表遊戲世界。這個位置很適合直接附加到對象並控制其行為的服務器腳本。複製第一 | 包含複製到客戶端之前的任何東西的對象。此位置最適合顯示載入屏幕所需的絕對最小集合對象和客戶端腳本。複製儲存 | 包含被複製到客戶端和伺服器的對象。這個位置非常適合 Class.ModuleScript\|ModuleScripts 你想在服務器和客戶端上使用的東西。Class.LocalScript\|LocalScripts不從這個位置執行,但Class.Script\|Scripts帶有Client執行上下文的運行。服務器腳本服務 | 包含服務器腳本。這個位置非常適合需要存取伺服器端功能或物件的腳本,例如遊戲邏輯和雲端儲存。服務器儲存 | 包含服務器側對象。這個位置非常適合那些不需要在體驗加入時立即複製給客戶的大型對象。腳本不從此位置運行,但您可以在此儲存服務器端 Class.ModuleScript\|ModuleScripts 。新手玩家.新手角色腳本 | 包含 Class.LocalScript\|LocalScripts 在角色生成時運行的腳本。新手玩家.新手玩家腳本 | 包含通用的 Class.LocalScript\|LocalScripts 腳本,當玩家加入體驗時運行。新手導覽 | 包含客戶端在載入遊戲時顯示的 GUI 元素。Class.LocalScript\|LocalScripts這個位置非常適合修改遊戲用戶介面的腳本,例如添加按鈕、選單和彈出窗口。新手包 | 通常只包含 Class.Tool\|Tools ,但也可以包含 Class.LocalScript\|LocalScripts 來設置玩家背包。

腳本

Roblox 體驗支持三種不同類型的 Luau 腳本:

  • 客戶端腳本

    這些腳本在客戶端運行,伺服器無法看到它們的行為。為了舊版本的原因,這些腳本可以以 LocalScriptsScripts 的形式出現,並具有 RunContext 值的 Client 。客戶端腳本通常生活在 ReplicatedStorageStarterPlayerScriptsStarterCharacterScripts

  • 伺服器腳本

    這些腳本在伺服器上運行,客戶端沒有能見到它們的行為。伺服器腳本有 RunContext 值的 Server 並通常住在 ServerScriptService 中,其內容不會複製到遊戲客戶端。

  • 模組腳本

    這些腳本是可重複使用的代碼片段,會返回一個準確值,通常是一個函數或表 (或一組功能表)。而不是在客戶端和服務器腳本中複製代碼,使用模組腳本來在兩者之間共享代碼和數據。模組腳本經常住在 ReplicatedStorage ,但如果您想在客戶端-伺服器邊界相同側面上分享代碼,可以住在其他地方。

虛擬沒有不同腳本類型的概念。如果您選擇製作多人遊戲,您會寫額外的代碼來同步服務器和客戶端之間的遊戲狀態。

在虛擬中,引擎的大部分功能可以通過擴展內置類別,例如 UObject , ACharacters , ULevelUWorld 在 C++ 或藍圖中獲得。虛擬支持自訂事件,但許多類別包含引擎會自動在等級的自然生命週期中呼叫的事件。

與不實的「滴答」系統相比,Roblox 腳本的事件驅動性要強得多。您可以透過訂閱服務並聆聽更新來使用相似的引擎功能。

C++ 和 Luau

對於指令碼化,Unreal 使用 C++。Roblox 使用 Luau,一種腳本語言由 Lua 5.1 派生。

與 Luau 相比,C++ 具有整體性能優勢,可能或不可能與你想要組建的體驗類型無關。Luau 逐漸輸入並具有較少的詳細語法。然而,在更大的項目中,逐漸輸入可能會導入強烈類型化語言,例如 C++,避免的類別錯誤,因此考慮在 Roblox 腳本中啟用 嚴格類型檢查

虛擬也包括一個名為藍圖的視覺腳本系統。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 中不存在,因此實現方式將大為不同。

資產

虛擬和 Roblox 兩者都支持在 .fbx 格式匯入自訂網格和模型。某些類型的資產可能需要從第三方模型化軟件中匯出特定配置和輸出設置。欲了解更多信息,請參閱以下頁面:

在 Unreal 中,資產會匯入到你的 Content 目錄中,可在內容瀏覽器中看到。在 Roblox 中,資產會匯入您的工作區和 工具箱庫存 部分的 資產管理器

Roblox 也提供開源 Blender 插件 來加快進口流程,與 Blender 工具的 傳送到 Unreal 功能相似。

變形

props.engine 的變形和 Roblox 的 CFrames 用於代表物體的 3D 變形有相似的用途:

  • 兩種變形和 CFrames 都代表在 3D 空間中對象的位置和旋轉。變形包括比例放,而 Roblox 使用的是一個 BasePart.Size 屬性,這不是 CFrame 的一部分。
  • 兩者都支持複合(即組合)對複雜變形的多次乘法,並內置其他操作方法。

合作

在 Unreal 中,您與 Perforce 或 SVN 等版本控制系統合作,通常通過 Unreal 內置的使用者介面進行。這些版本控制系統使用集中的「檢查」模型,在一個人工作時鎖定文件。

Roblox 檔案住在雲端(雖然您可以匯出副本),因此 Roblox Studio 提供內建的協作工作流程,用於同時編輯、群組管理、權限、腳本草稿和更多。請參閱協作

插件

與 Unreal 相似,Roblox Studio 支持 插件,這可以簡化或給您額外控制開發過程的各方面。插件可以在 創作者商店 中找到,與資產一樣,很多是免費的。

術語表

| 虛擬 | Roblox | 筆記 | | :--- | :--- | :--- | | 等級 | 放置 | | | 演員 | PartModel | 看到 哲學差異 。| | 藍圖類別 | 包裝 | | | 轉換 | CFrame | CFrame 不包含縮放信息。請參閱變形。| | 概述器 | 探索器窗口 | | | 詳情面板 | 屬性窗口 | | | 等級視窗 | 視窗 | | | 內容瀏覽器 | 資產管理器工具箱 | | | 景觀模式 | 地形編輯器 | | | 玩家開始 | SpawnLocation | | | 輸出日誌 | 輸出 | | | 市場 | 創作者商店 | | | 菜單欄 | 菜單欄 | | | 插件 | 插件 | | | 輸出日誌 | 輸出 | | | 輸出日誌 | 輸出 | | | 輸出日誌 | 輸出 | | | 輸出日誌 | 輸出日誌 | | | 輸出日誌 | 輸出日誌 | | |