このページには、経験豊富な Unreal Engine 開発者が Roblox を始めるための情報が含まれており、基本的なオリエンテーション、概念的な比較、および両プラットフォーム間の重要な違いが説明されています。
オリエンテーション


Unreal の アウトライナー と Roblox Studio の エクスプローラー は、3D 空間内の要素を整理するための主要なウィンドウです。どちらもオブジェクトとフォルダーの階層を表示します。ただし、アウトライナー はよりフラットで定義が少ない構造を持ち、Actors のみを表示します。エクスプローラー ウィンドウは、厳密にネストされた構造を持ち、階層の一部としてすべてのオブジェクトを表示します。これには、Unreal ではコンポーネントと見なされるオブジェクトも含まれます。
Roblox Studio の アセットマネージャー と ツールボックス は、Unreal の コンテンツブラウザ と重なります。アセットマネージャー はゲーム内のすべてのアセットを管理するためのものであり、ツールボックス は公開したアセットにアクセスするためのものです。ツールボックス では、Unreal Engine の マーケットプレイス に似た Roblox やコミュニティのアセットを検索することもできますが、Studio ユーザーインターフェースから直接アクセスできます。
哲学的な違い
Roblox は従来のゲームエンジンではなく「シミュレーションエンジン」です。Unreal の Actors と Roblox の Parts はどちらも基本的なビルディングブロックとして機能しますが、実際には二つはかなり異なります。
- 表現: 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
| |- ScriptRoblox の物理デフォルトの哲学は、3D モデルを構築するプロセスにも及びます。Roblox では、複数のパーツを アセンブリ に溶接することが、物を迅速に構築する優れた方法です。なぜなら、Roblox は溶接されたパーツを単一の剛体として扱うからです。このアプローチは Unreal では実用的ではありません。
長さと質量の標準メートル単位を使用する代わりに、Roblox はスタッドと Roblox 質量単位 (RMU) と呼ばれる概念的な単位を使用します。おおよそのメートル換算と使用に関する推奨事項については、単位を参照してください。
ロケーションの重要性
Roblox ゲームはデフォルトでマルチプレイヤーであるため、Roblox Studio には特定の動作を持つさまざまなストレージロケーションが含まれています。詳細については、クライアント-サーバーランタイム と オブジェクトの整理を参照してください。
| Location | Description |
|---|---|
| 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ゲームは、3種類の異なるLuauスクリプトをサポートしています。
クライアントスクリプト
これらのスクリプトはクライアント上で実行され、サーバーはその動作を可視化することができません。レガシーの理由から、これらのスクリプトはLocalScriptsまたはScriptsの形式を取り、RunContextの値はClientです。クライアントスクリプトは通常、ReplicatedStorage、StarterPlayerScripts、またはStarterCharacterScriptsに配置されます。
サーバースクリプト
これらのスクリプトはサーバー上で実行され、クライアントはその動作を可視化することができません。サーバースクリプトは、RunContextの値がServerであり、通常はServerScriptServiceに存在し、その内容はクライアントに複製されることはありません。
モジュールスクリプト
これらのスクリプトは再利用可能なコードの単位で、正確に1つの値、通常は関数またはテーブル(または関数のテーブル)を返します。クライアントとサーバースクリプトのコードを重複させるのではなく、モジュールスクリプトを使用して両者間でコードとデータを共有してください。モジュールスクリプトは通常、ReplicatedStorageに存在しますが、クライアントとサーバーの境界の同じ側にあるスクリプト間でコードを共有したい場合は、他の場所に配置することもできます。
Unreal には異なるスクリプトタイプの概念がありません。マルチプレイヤーゲームを作成することを選択した場合、サーバーとクライアント間でゲーム状態を同期するために追加のコードを書く必要があります。
Unreal では、エンジンの機能の多くは、C++ または Blueprint で UObject、ACharacters、ULevel、UWorld などの組み込みクラスを拡張することによって利用可能です。Unreal はカスタムイベントをサポートしていますが、多くのクラスには、レベルの自然なライフサイクルの一部としてエンジンが自動的に呼び出すイベントが含まれています。
Unreal の「ティッキング」システムと比較して、Roblox スクリプトははるかにイベント駆動型です。サービスにサブスクライブし、更新をリッスンすることで、同様のエンジン機能にアクセスします。
C++ と Luau
スクリプティングには、Unreal は C++ を使用します。Roblox は Luau を使用しており、これは Lua 5.1 から派生したスクリプト言語です。
Luau と比較して、C++ は全体的にパフォーマンスの利点がありますが、これはあなたが構築したいゲームの種類に関連するかもしれませんし、そうでないかもしれません。Luau は徐々に型付けされており、冗長性の少ない構文を持っています。ただし、大規模なプロジェクトでは、徐々に型付けが C++ のような強い型付けの言語が回避するバグのカテゴリを導入する可能性があるため、Roblox スクリプトで 厳密な型チェック を有効にすることを検討してください。
Unreal には Blueprints と呼ばれるビジュアルスクリプティングシステムも含まれています。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 では、アセットは コンテンツブラウザ に表示される Content ディレクトリにインポートされます。Roblox では、アセットはワークスペースにインポートされ、ツールボックス または アセットマネージャー にもインポートされます。
Roblox では、インポートプロセスを簡素化するためのオープンソースの Blender プラグイン も提供されており、これは Blender Tools の Unreal に送信 機能に似ています。
トランスフォーム
Unreal Engineの変換とRobloxのCFramesは、オブジェクトの3D変換を表現する上で類似の目的を果たします:
- 変換とCFramesは、どちらも3D空間におけるオブジェクトの位置と回転を表します。変換にはスケールが含まれますが、RobloxではBasePart.Sizeプロパティが使用されており、これはCFrameの一部ではありません。
- 両者は複雑な変換のための乗算をサポートしており、他の操作のための組み込みメソッドを持っています。
コラボレーション
Unreal では、Perforce や SVN のようなバージョン管理システムを使用してコラボレーションを行います。これらのバージョン管理システムは、一般的に Unreal の組み込みユーザーインターフェースを通じて使用され、ファイルを一人が作業している間にロックする中央集権的な「チェックアウト」モデルを使用します。
Roblox ファイルはクラウドに存在します(コピーをエクスポートすることはできます)が、Roblox Studio は同時編集、グループ管理、権限、スクリプトのドラフト作成などのための組み込みのコラボレーションワークフローを提供します。詳細については、コラボレーションを参照してください。
プラグイン
Unreal と同様に、Roblox Studio は プラグイン をサポートしており、開発プロセスのさまざまな側面を簡素化したり、追加の制御を提供したりできます。プラグインは、アセットと同様に クリエイターストア で入手可能で、多くは無料です。
用語集
| Unreal | Roblox | Notes |
|---|---|---|
| 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 |