Unity開発者向けのRoblox

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

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

オリエンテーション

さまざまなウィンドウとパネルを示すマークアップ付きのUnityユーザーインターフェース。 さまざまなウィンドウとパネルを示すマークアップ付きのRoblox Studioユーザーインターフェース。

UnityのHierarchyウィンドウとRoblox StudioのExplorerは、3Dシーン内の要素を整理するための主要なウィンドウです:

  • 両者とも、オブジェクト(たとえば、キャラクターや環境資産)を管理し、整理することを可能にします。
  • 両者はオブジェクト間の親子関係のためにツリー構造を使用します。

しかし、Hierarchyウィンドウには予め定義された構造がないのに対し、Explorerウィンドウには厳格な構造があります。Explorerウィンドウは、UnityのHierarchyProjectウィンドウの組み合わせとして考えるとわかりやすいかもしれません。最も認識しやすい要素はWorkspaceフォルダーです。

同様に、Roblox StudioのAsset ManagerToolboxはUnityのProjectウィンドウと重なります。Asset Managerはゲーム内のすべての資産を管理できる一方、Toolboxは発表したすべての資産にアクセスできるようになります。Toolboxを使用すると、UnityのAsset Storeに似た形で、Robloxやコミュニティからの資産をCreator Storeで検索することもできます。

哲学的な違い

Robloxは、従来のゲームエンジンではなく「シミュレーションエンジン」です。UnityのGameObjectsとRobloxのPartsはどちらも3D環境でオブジェクトを作成するための基本的なビルディングブロックですが、実際にはかなり異なります:

  • 表現: UnityのGameObjectsはシーン内の任意のオブジェクトに関する高レベルの概念ですが、RobloxのPartsは木製のブロックやプラスチックの球などの物理オブジェクトを表現するために設計されています。Unityのプリミティブオブジェクトのような抽象幾何学ではありません。
  • 物理: Unityでは、GameObjectRigidbodyColliderのようなコンポーネントをアタッチすることで物理シミュレーションを実行します。Robloxでは、物理はPartsデータ型に組み込まれており、エンジンが自動的に相互作用を処理します。

GameObjectPartを作成すると、その違いがすぐにわかります。GameObjectには位置、回転、スケール以上の情報はありません。Partには同じ情報に加えて、マテリアルや色、反射率や透明度の値、質量と形状などが含まれています。Partを空のGameObjectに似せるためには、多くの組み込みプロパティを削除する必要があります。逆に、MeshFilterMeshRendererColliderRigidbodyコンポーネントを追加することで、GameObjectPartに見えるようにすることができます。

スクリプトの観点から見ると、GameObjectはRobloxのInstanceに最も似ています。Instanceは他のすべてのRobloxクラスのベースクラスですが、Instance型のオブジェクトは作成できないため、この比較は特に実用的ではありません。

もう一つの比較は、UnityのGameObjectとRobloxのModelです。モデルは、Unityで多くのGameObjects間に親子関係を確立するように、相互に接続されたパーツのコレクションのコンテナとして機能します。モデルの部分の1つをプライマリーパーツとして指定してピボットポイントを定義します。モデルは、スクリプト、アニメーション、サウンドエフェクト、プロンプト、制約、パーティクルエミッタなども保持します。

たとえば、UnityのGameObjectには、ParticleSystemPhysics3DSpringConstraint、スクリプトのコンポーネントが存在します。Hierarchyウィンドウでは、SpringyFireballという単一のGameObjectが表示されます。Inspectorウィンドウでは、コンポーネントとプロパティのコレクションが表示されます。

Robloxでは、ExplorerウィンドウにあるSpringyFireballモデルは次のようになります:


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

Robloxのデフォルトの物理哲学は、3Dモデルを構築するプロセスにも及びます。Robloxでは、複数のパーツをアセンブリとして溶接することが、迅速に物を作る素晴らしい方法です。なぜなら、Robloxは溶接されたパーツを単一の剛体として扱うからです。このアプローチはUnityでは利用できません。

長さや質量の標準メートル単位を使用するのではなく、RobloxではスタッドやRoblox質量単位 (RMU) と呼ばれる仮想単位を使用します。おおよそのメトリック変換や使用に関する推奨事項については、Unitsを参照してください。

場所が重要

Robloxのゲームはデフォルトでマルチプレイヤーであるため、Roblox Studioには特定の動作を持つさまざまなストレージロケーションが含まれています。詳細については、クライアントサーバーランタイムおよびオブジェクトの整理を参照してください。

LocationDescription
Workspaceゲームの3Dワールドを表します。この場所は、オブジェクトに直接接続してその動作を制御するサーバースクリプトに適しています。
ReplicatedFirst他のものの前にクライアントに複製されるオブジェクトを含みます。この場所は、ローディング画面を表示するために必要なオブジェクトとクライアントスクリプトの絶対最小セットに最適です。
ReplicatedStorageクライアントとサーバーの両方に複製されるオブジェクトを含みます。この場所は、サーバーとクライアントの両方で使用するModuleScriptsに最適です。LocalScriptsはこの場所からは実行されませんが、RunContextClientScriptsは実行されます。
ServerScriptServiceサーバースクリプトを含みます。この場所は、ゲームのロジックやクラウドストレージなど、サーバー側の機能やオブジェクトにアクセスする必要があるスクリプトに最適です。
ServerStorageサーバー側のオブジェクトを含みます。この場所は、ゲームに参加したときにクライアントに即座に複製する必要のない大きなオブジェクトに最適です。スクリプトはこの場所からは実行されませんが、ここにサーバー側のModuleScriptsを格納することができます。
StarterPlayerStarterCharacterScriptsキャラクターがスポーンする際に実行されるLocalScriptsを含みます。
StarterPlayerStarterPlayerScriptsプレイヤーがゲームに参加したときに実行される一般的なLocalScriptsを含みます。
StarterGuiクライアントがゲームをロードするときに表示するGUI要素を含みます。LocalScriptsはこの場所から実行できます。この場所は、ボタン、メニュー、ポップアップを追加するなど、ゲームのユーザーインターフェースを変更するスクリプトに最適です。
StarterPack一般的にはToolsのみを含みますが、プレイヤーバックパックを設定するためのLocalScriptsを含むこともできます。

スクリプティング

Robloxゲームは、3種類の異なるLuauスクリプトをサポートしています。

  • クライアントスクリプト

    これらのスクリプトはクライアント上で実行され、サーバーはその動作を可視化することができません。レガシーの理由から、これらのスクリプトはLocalScriptsまたはScriptsの形式を取り、RunContextの値はClientです。クライアントスクリプトは通常、ReplicatedStorageStarterPlayerScripts、またはStarterCharacterScriptsに配置されます。

  • サーバースクリプト

    これらのスクリプトはサーバー上で実行され、クライアントはその動作を可視化することができません。サーバースクリプトは、RunContextの値がServerであり、通常はServerScriptServiceに存在し、その内容はクライアントに複製されることはありません。

  • モジュールスクリプト

    これらのスクリプトは再利用可能なコードの単位で、正確に1つの値、通常は関数またはテーブル(または関数のテーブル)を返します。クライアントとサーバースクリプトのコードを重複させるのではなく、モジュールスクリプトを使用して両者間でコードとデータを共有してください。モジュールスクリプトは通常、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では、オブジェクトはProjectウィンドウに表示されるAssetsディレクトリにインポートされます。Robloxでは、アセットはWorkspaceにインポートされ、ToolboxAsset Managerに入ります。

Robloxはまた、インポートプロセスを合理化するために、オープンソースのBlenderプラグインを提供しています。

トランスフォーム

Unityの変換とRobloxのCFramesは、オブジェクトの3D変換を表現する上で類似の目的を果たします:

  • 変換とCFramesは、どちらも3D空間におけるオブジェクトの位置と回転を表します。変換にはスケールが含まれますが、RobloxではBasePart.Sizeプロパティが使用されており、これはCFrameの一部ではありません。
  • 両者は複雑な変換のための乗算をサポートしており、他の操作のための組み込みメソッドを持っています。

コラボレーション

Unityでは、一般的なバージョン管理システムやUnity Version Controlのような有料サービスを使用してコラボレーションを行います。

Robloxファイルはクラウドに保存されます(コピーをエクスポートすることも可能ですが)、そのため、Roblox Studioは同時編集、グループ管理、権限、スクリプト草案作成などのための内蔵コラボレーションワークフローを提供します。詳細はコラボレーションを参照してください。

プラグイン

Unityツールと同様に、Roblox Studioはプラグインをサポートしており、開発プロセスのさまざまな側面を簡素化または制御を強化することができます。プラグインはCreator Storeで入手でき、多くは無料です。

用語集

UnityRobloxNotes
シーンPlace
GameObjectPartまたはModel哲学的な違いを参照してください。
プレハブPackage
トランスフォームCFrameCFrameにはスケール情報が含まれていません。トランスフォームを参照してください。
ヒエラルキーExplorer
インスペクターProperties
シーンビュー3Dビューポート
ゲームビュー3Dビューポートビューポートはゲームをテストするときにプレイビューに移行します。
プロジェクトウィンドウAsset ManagerまたはToolbox
地形インスペクターTerrain Editor
スポーンポイントSpawnLocation
コンソールOutput
アセットストアCreator Store
オーバーレイToolbar
ツールPlugin
©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。