アンリアル開発者向け Roblox

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

このページには、経験豊富な Unreal Engine 開発者が RoblRoblox(ロブロックス)x で開始するのを助ける情報が含まれています:基本的な方向性、概念的な比較、および 2 つのプラットフォーム間の主要な違い。

方向性を得る

Unreal's Outliner と Roblox Studio's Explorer は、3D 空間で要素を整理するための主なウィンドウです。両方ともオブジェクトとフォルダの階層を表示します。しかし、アウトライナーにはより平坦で定義が少ない構造があり、Actors のみを表示します。エクスプローラーウィンドウには、深くネストされた厳格な構造があり、Unreal でコンポーネントとして考えられるオブジェクトすらも、階層の一部として表示されます。

Roblox Studio アセットマネージャーツールボックス は、Unreal Content Browser と重複します。アセットマネージャでは、エクスペリエンス内のすべてのアセットを管理できますが、ツールボックスでは、公開したすべてのアセットにアクセスできます。ツールボックスは、Roblox またはコミュニティからのアセットを検索することもできます。クリエイターストアは、Unreal Engine マーケットプレイスと似ていますが、スタジオユーザーインターフェイスから直接アクセスできます。

哲学的な違い

Roblox は伝統的なゲームエンジンではなく「シミュレーションエンジン」です。Unreal Actors と Roblox Parts は、両方とも基本的なビルディングブロックとして機能しますが、実際には、2つはかなり異なっています:

  • 表現 : Actors は、レベル内のすべてのオブジェクトに対する上位レベルのコンセプトであり、Roblox の Parts は、木のブロックやプラスチックの球のような物理オブジェクトを表現するように設計されています。
  • 物理 : Unreal で物理シミュレーションを実行するには、特定のコンポーネント (例: StaticMeshComponent ) 内の物理を有効にしたり、物理制約などのコンポーネントを Actors に追加したりします。Roblox では、物理は Parts データタイプに組入力込まれています;エンジンは自動的にインタラクションを処理します。

ActorPart を作成すると、すぐに違いが見えます。The Actor には、場所、回転、スケール以上のものがありません。Part には、同じ情報があります—プラス素材と色、反射率と透明度、質量と形状など、さらに多くのものがあります。2つは、Unreal で StaticMeshActor を比較するときにのみ、似たプロパティを共有し始めます(例えばa cube) を 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 におけるコンポーネントのコンテナとして、相互に接続されたパーツのコレクションの容器として機能します。モデルのパーツの 1つを、その 主要パーツ として指定して、ピボットポイントを定義します。モデルには、スクリプト、アニメーション、サウンド効果、プロンプト、制約、パーティクルエミッターなどが保存されています。

たとえば、Unreal Actor には、目的のビジュアル効果を達成するために複数のエミッターを使用する NiagraComponent 、形状のメッシュ、弾力性を追加する物理制約、プレイヤーの相互作用のためのスクリプトがあるかもしれません。アウトライナーでは、 という名前の単一の を見ます。

Roblox では、エクスプローラ ウィンドウで同様の SpringyFireball モデルが次のように表示される可能性があります:


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

Roblox のデフォルトの物理学の哲学は、3D モデルのビルドプロセスに拡張されます。Roblox では、複数のパーツを組み立てて アセンブリ に結合することは、Roblox が接合部品を単一の剛ボディとして扱うため、物を迅速に作成するのに最適な方法です。このアプローチは Unreal では実用的ではありません。

長さと質量の標準メトリック単位を使用するのではなく、Roblox は studs と Roblox Mass Units (RMUs) という想定の単位を使用します。推定メトリック変換と使用周辺の推奨事項については、ユニット を参照してください。

場所が重要

Roblox の経験はデフォルトでマルチプレイヤーですが、Roblox Studio には、特定の動作を持つ多くの異なるストレージロケーションが含まれています。たとえば、スクリプトは ReplicatedStorage に入れたときに実行するかもしれませんが、StarterPlayerScripts に入れたときには実行しません。詳しくは、クライアント-サーバーランタイムオブジェクト組織 を参照してください。

場所 | 説明 :--- | :--- ワークスペース | ゲームワールドを表現します。この場所は、オブジェクトに直接付属して動作を制御するサーバースクリプトに最適です。ReplicatedFirst | 他の何よりも先にクライアントに複製するオブジェクトを含みます。この場所は、ロードスクリーンを表示するために必要な絶対最小限のオブジェクトとクライアントスクリプトのセットに最適です。ReplicatedStorage | クライアントとサーバーの両方に複製されるオブジェクトを含みます。この場所は、サーバーとクライアントの両方で使用したい Class.ModuleScript\|ModuleScripts に最適です。Class.LocalScript\|LocalScripts この場所から実行しないが、Class.Script\|Scripts は、Client の実行コンテキストで実行する。ServerScriptService | サーバースクリプトサービス | サーバースクリプトを含むこの場所は、ゲームロジックやクラウドストレージなど、サーバー側の機能やオブジェクトにアクセスする必要があるスクリプトに最適です。ServerStorage | サーバー側のオブジェクトを含みます。この場所は、エクスペリエンスに参加するとすぐにクライアントにレプリケートする必要がない大きなオブジェクトに最適です。スクリプトはこの場所から実行しませんが、サーバー側の Class.ModuleScript\|ModuleScripts をここに保存できます。StarterPlayer.StarterCharacterScripts | キャラクターがスポーンするときに実行する Class.LocalScript\|LocalScripts が含まれています。StarterPlayer.StarterPlayerScripts | プレイヤーがエクスペリエンスに参加すると実行される一般的な目的の Class.LocalScript\|LocalScripts が含まれています。StarterGui | ゲームをロードするとクライアントが表示する GUI 要素を含みます。Class.LocalScript\|LocalScripts この場所から走ることができます。この場所は、ボタン、メニュー、ポップアップなど、ゲームのユーザーインターフェイスを変更するスクリプトに最適です。スターターパック | 一般的には Class.Tool\|Tools のみを含みますが、プレイヤーバックパックの設定に Class.LocalScript\|LocalScripts を含めることもできます。

スクリプト化

Roblox の経験は、3種類の Luau スクリプトをサポートします:

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

    これらのスクリプトはクライアント上で実行され、サーバーはその動作に対して見えない。レガシーの理由により、これらのスクリプトは LocalScripts または Scripts の形式で、RunContext 値の Client を取ることができます。クライアントスクリプトは通常、ReplicatedStorageStarterPlayerScripts、またはStarterCharacterScriptsで生活します。

  • サーバースクリプト

    これらのスクリプトはサーバー上で実行し、クライアントはその動作を見ることができません。サーバースクリプトには RunContext 値の Server があり、通常は ServerScriptService に住んでおり、ゲームクライアントにコンテンツがレプリケートされない

  • モジュールスクリプト

    これらのスクリプトは、1つの値を正確に返す再利用可能なコードピースで、通常は関数またはテーブル (または関数のテーブル) です。クライアントとサーバースクリプトでコードとデータを複製するのではなく、モジュールスクリプトを使用して、両方の間でコードとデータを共有します。モジュールスクリプトはしばしば ReplicatedStorage で生活しますが、クライアント-サーバー境界の同側のスクリプト間でコードを共有したい場合は、別の場所で生活できます。

Unreal には、異なるスクリプトタイプのコンセプトはありません。マルチプレイヤーゲームを作成する場合、サーバーとクライアントの間のゲーム状態を同期する追加コードを書きます。

アンリアルでは、エンジンの機能の多くが UObjectACharactersULevel 、および UWorld で構成される内蔵クラスを拡張することで利用可能です。C++ または設計図で。アンリアルはカスタムイベントをサポートしますが、多くのクラスには、エンジンがレベルの自然なライフサイクルの一部として自動的に呼び出すイベントが含まれています。

アンリアルの「チケット」システムと比較して、Roblox スクリプトはイベント駆動型ではるかに多い。サービスにサブスクライブしてアップデートを聞き、同様のエンジン機能にアクセスします。

C++ と Luau

スクリプトのために、Unreal は C++ をスクリプト作成用します。Roblox は LuauLua 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 文字の HumanoidTools を装備できます。これらの仮定は Unreal では存在しないので、実装は大幅に異なるでしょう。

アセット

Unreal と Roblox は、.fbx 形式でカスタムメッシュとモデルをインポートすることを両方ともサポートします。特定のアセットタイプには、サードパーティのモデリングソフトウェアから特定の設定とエクスポート設定が必要な場合があります。詳しくは、次のページを参照してください:

Unreal では、アセットは Content ディレクトリにインポートされ、コンテンツブラウザで表示されます。Roblox では、アセットはワークスペースおよび ツールボックス または インベントリ セクションの アセットマネージャ にインポートされます。

Roblox はまた、オープンソースの Blender プラグイン を提供して、Blender Tools の Unreal に送信 機能に似た輸入プロセスを効率化します。

変形

props.engine の変換と Roblox の CFrames は、オブジェクトの 3D 変形を表現する際に、同様の目的を果たします:

  • 両方の変換と CFrames は、3D 空間におけるオブジェクトの位置と回転を表します。変換にはスケールが含まれますが、Roblox は BasePart.Size の一部ではない CFrame プロパティを使用します。
  • 両方とも、複雑な変換に対する倍数 (つまり、構成) をサポートし、他の操作に内蔵された方法を持っています。

共同作業

Unreal では、Perforce や SVN などのバージョン管理システムを通じて、一般的に Unreal の内蔵ユーザーインターフェイスを介してコラボレーションします。これらのバージョン管理システムは、1人が作業している間ファイルをロックする集中型「チェックアウト」モデルを使用します。

Roblox ファイルはクラウド上でライブです (複製をエクスポートできますが) ので、Roblox Studio は同時編集、グループ管理、権限、スクリプト作成などの内蔵コラボレーションワークフローを提供します。参照してください コラボレーション

プラグイン

Unreal と同様、Roblox Studio は プラグイン をサポートしており、開発プロセスの各側面を簡素化したり、追加の制御を与えたりできます。プラグインは クリエイターストア にあり、アセットと同様、無料のものが多くあります。

用語集

| アンリアル | Roblox | ノート | | :--- | :--- | :--- | | レベル | 場所 | | | アクター | Part または Model | 見る 哲学的な違い .| | Blueprint クラス | パッケージ | | | 変換 | CFrame | CFrame スケール情報は含まれていません。参照してください 変換。| | アウトライナー | エクスプローラーウィンドウ | | | 詳細パネル | プロパティウィンドウ | | レベルビューポート | ビューポート | | | コンテンツブラウザ | アセットマネージャー または ツールボックス | | | 景観モード | 地形エディタ | | | プレイヤースタート | | | | 出力ログ | 出力 | | | マーケットプレイス | クリエイターストア | | | メニューバー | メニューバー | | | プラグイン | プラグイン | | | 出力ログ | 出力 | | | プラグイン | プラグイン | |