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


UnrealのアウトライナーとRoblox Studioのエクスプローラーは、3D空間内の要素を整理するための主要なウィンドウです。どちらもオブジェクトとフォルダの階層を表示します。ただし、アウトライナーは平坦で定義が少ない構造を持ち、Actorsのみを表示します。エクスプローラーウィンドウは、厳密な構造を持ち深くネストされており、Unrealでコンポーネントと見なされるオブジェクトも階層の一部として表示されます。
Roblox Studioのアセットマネージャーとツールボックスは、Unrealのコンテンツブラウザと重なります。アセットマネージャーはゲーム内のすべてのアセットを管理でき、ツールボックスは公開したアセットにアクセスできます。ツールボックスは、Robloxやコミュニティからのアセットを検索してクリエイターストアを探すこともでき、Unreal Engineのマーケットプレイスと似ていますが、スタジオのユーザーインターフェースから直接アクセスできます。
哲学的な違い
Robloxは従来のゲームエンジンではなく「シミュレーションエンジン」です。UnrealのActorsとRobloxのPartsはどちらも基本的な構成要素ですが、実際には非常に異なります:
- 表現:UnrealのActorsはレベル内の任意のオブジェクトのための高レベルの概念であり、RobloxのPartsは木製ブロックやプラスチック球のような物理オブジェクトを表現するために設計されています。
- 物理:Unrealで物理シミュレーションを行うには、特定のコンポーネント(StaticMeshComponentなど)内で物理を有効にしたり、物理制約などのコンポーネントをActorsに追加します。Robloxでは、物理はPartsデータ型に組み込まれています。エンジンが自動的に相互作用を処理します。
ActorとPartを作成すると、すぐに違いが分かります。Actorにはロケーション、回転、スケール以外の情報はほとんどありません。Partには同じ情報に加え、マテリアルや色、反射率や透明度の値、質量や形状など、さらに多くの情報があります。2つは、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は溶接されたパーツを1つの剛体として扱うからです。このアプローチはUnrealでは実用的ではありません。
長さと質量の標準のメトリック単位を使用する代わりに、RobloxはスタッドやRoblox質量単位(RMU)と呼ばれる仮想ユニットを使用します。メトリックへの近似変換と使用に関する推奨事項については、ユニットを参照してください。
位置が重要
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ゲームは、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では、アセットはWorkspaceおよびツールボックスまたはアセットマネージャーにインポートされます。
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 |