すべてのプレースはデータモデルで表されており、それはプレースに関するすべてを説明するオブジェクトの階層です。データモデルには、パーツ、地形、照明、その他の環境要素など、3Dワールドを構成するすべてのオブジェクトが含まれています。また、プロパティを変更したり、メソッドや関数を呼び出したり、ダイナミックな動作やインタラクティブな応答を可能にするイベントに反応するスクリプトなど、ランタイムの動作を制御できるオブジェクトも含まれています。
Robloxエンジンは、プレースの状態の真実のソースとしてデータモデルを使用し、それをクライアントデバイスでシミュレートしてレンダリングします。データモデルの解釈方法についての詳細は、クライアント-サーバーランタイムを参照してください。
オブジェクト
あなたは、データモデルにオブジェクトを配置して整理し、Robloxのプレースを表現します。Robloxのすべてのオブジェクトは、一般的なプロパティ、メソッド、およびすべてのオブジェクトに共通するイベントを定義するInstanceクラスから継承されています。オブジェクトは提供する機能に応じて独自の特性も定義します。用途の広いさまざまなカテゴリのオブジェクトがありますが、一般的にBasePartおよびLuaSourceContainerオブジェクト、一般的にはパーツおよびスクリプトと呼ばれるものを頻繁に扱います。
Robloxエンジンのすべての機能の包括的なリストについては、リファレンスドキュメントを参照してください。
3Dビルディングブロック
BasePartは、物理的にシミュレートされた3Dビルディングブロックのためのコアクラスです。これは、位置、サイズ、および向きなどのプロパティを持つすべての物理オブジェクトに共通するプロパティとメソッドを定義します。
| オブジェクト | 説明 |
|---|---|
| Part | ブロック、ボール、円柱、くさび、または角のくさびの形をとることができる原始的なパーツです。 |
| MeshPart | MayaやBlenderのような3Dモデリングソフトウェアからインポートされたメッシュです。 |
| TrussPart | キャラクターが梯子のように登ることができるトラスビームです。 |
理論的には単純なパーツのみを使用して完全に機能するRobloxゲームを作成できますが、おそらくメッシュをインポートし、原始的なパーツを組み合わせて、ソリッドモデリングを通じてより複雑なオブジェクトや構造を作成することがよくあります。
スクリプト
スクリプトを使用してプレースの3Dワールドにインタラクティブ性と動作を追加し、ロジックを定義できます。スクリプトはLuauプログラミング言語で記述し、パーツを移動させたり、他のスクリプトを呼び出したり、イベントに応じたりします。Robloxはクライアント-サーバーモデルで動作するため、サーバー、クライアントのいずれかでスクリプトを実行したり、ネットワーク境界を越えて通信したりできます。
- Scriptオブジェクトは、サーバー上でのみ実行できるスクリプトを表します。
- LocalScriptオブジェクトは、クライアント上でのみ実行できるスクリプトを表します。
- ModuleScriptオブジェクトは、サーバーとクライアントのスクリプトの両方からrequire()できる再利用可能なスクリプトを表します。
スクリプトが正しく動作するためには、データモデル内の正しいコンテナに配置する必要があります。詳細はサーバーおよびクライアントセクションを参照してください。
オブジェクトの整理
データモデルを整理する方法には多くの柔軟性がありますが、Robloxエンジンは特定のオブジェクトが特定のコンテナサービスに存在することを期待しています。これらは特定の動作を持ち、含まれるオブジェクトの動作に影響を与えるオブジェクトです。コンテナサービスの主なカテゴリには次のものがあります:
- Workspace — Workspaceは3Dワールドにレンダリングされるすべてのオブジェクトを格納します。
さらに、次のオブジェクトを使用してオブジェクトをさらに整理できます:
- フォルダー — Folderは組織目的で使用され、動作を定義しません。たとえば、サーバーストレージ内のスクリプトのセットのように、似たようなオブジェクトをグループ化するためにフォルダーを使用できます。
- モデル — Modelは主にパーツの幾何学的グループ化を目的としており、椅子、テーブル、ランプを含むデスクセットのようなものです。さらに複雑なセットを整理するために、モデルをモデル内にネストすることもできます。
ワークスペース
Workspaceにはプレースの3Dワールドを構成するすべてのオブジェクトが含まれています。ワークスペースにオブジェクトを追加して、基礎パーツ、メッシュパーツ、モデルなど、3Dワールドをカスタマイズできます。クライアントはこのコンテナに表示されるすべてのものをレンダリングし、それ以外のものは何も表示しないため、プレースでユーザーが見るものや、インタラクトするものを制御できます。実際にはレンダリングされませんが、関連するパーツやモデルに親子関係を持たせたスクリプトも追加できます。デフォルトでは、ワークスペースにはTerrainとCameraオブジェクトがあらかじめ配備されています。
カメラ
Cameraはクライアントが3Dワールドをどのように見るかを決定します。デフォルトでは、ワークスペースに1つのカメラがありますが、異なる視点やビューを作成するために複数のカメラオブジェクトを追加できます。すべてのクライアントはこれらの設定を取得して、サーバーが直接変更できない独自のカメラビューを作成します。
たとえば、カメラをユーザーの動きに追従させたり、特定の位置に固定したりできます。また、視野、距離、角度を調整して、ユーザーが3Dワールドをどのように見るかに異なる視覚効果を作成できます。
詳細については、カメラのカスタマイズを参照してください。
地形
Terrainを使用すると、プレースの風景を作成できます。地形に材質を適用して、草、水、砂、またはカスタム材質などの望ましい自然環境をシミュレートできます。3Dワールドには1つの地形オブジェクトしか持つことができず、その地形に1つの材質しか適用できませんが、Terrain Editorを使用して地形の領域を編集できます。
詳細については、環境地形を参照してください。
環境
カスタム照明は、3Dワールドをより没入感のある現実的なものにすることができます。Lightingサービスには、雰囲気効果をシミュレートするためのAtmosphereや、環境内の日、月、星を変更するためのSkyなど、プレースのグローバルな照明設定を制御するオブジェクトが含まれています。さらに、特定のオブジェクトから光を放出するために光源を使用できます。
ゲームに音声を追加することも非常に重要で、ゲームを新たな高みに持っていくことができます。位置依存型および非位置依存型の音声を戦略的に使用することで、プレイヤーを世界に没入させ、アクションに対する有用なフィードバックを提供し、目標を達成するために何をすべきかに集中させることができます。
複製
複製は、サーバーがプレースの状態をすべての接続クライアントと同期させるプロセスです。Robloxエンジンは、データ、物理、およびチャットメッセージをサーバーとクライアントの間で自動的に複製しますが、特定のオブジェクトを特定のコンテナに配置することで明示的に複製するよう指定することもできます。
ReplicatedFirst
ReplicatedFirstには、クライアントがプレースに参加したときに複製したいオブジェクトが含まれています。通常、クライアント側のLocalScriptオブジェクトなど、プレイヤーを初期化するために不可欠なオブジェクトが含まれます。このコンテナ内のすべてのコンテンツは、一度だけサーバーからクライアントに複製されます。
ReplicatedStorage
ReplicatedStorageには、サーバーと接続されたクライアントの両方で利用可能なオブジェクトが含まれています。クライアントで発生した変更は持続しますが、サーバーに複製されることはありません。サーバーは整合性を保つために、クライアントでの変更を上書きすることがあります。このコンテナは、Script(サーバー側)とLocalScript(クライアント側)オブジェクトの両方で共有およびアクセスする必要のあるModuleScriptオブジェクトに一般的に使用されます。さらに、必要になるまで3Dワールドに存在する必要のないオブジェクト(たとえば、すべてのキャラクターモデルにクローンして親子関係を持たせるParticleEmitter)を複製するためにこのコンテナを使用できます。
複製がどのように機能するかの詳細については、クライアント-サーバーランタイムを参照してください。
サーバー
データモデルは、クライアントに複製されることのないサーバー専用オブジェクトのための専用コンテナを定義します。これにより、サーバーはクライアントにサーバーのオブジェクトやロジックを公開することなく、クライアントの動作や状態に影響を与えることができます。
ServerScriptService
ServerScriptServiceには、Scriptオブジェクト、サーバースクリプトによって必要とされるModuleScriptオブジェクト、およびサーバー専用のスクリプト関連オブジェクトが含まれています。スクリプトが他の非スクリプトオブジェクトを必要とする場合は、それらをServerStorageに配置する必要があります。このコンテナ内のスクリプトはクライアントに複製されることはなく、安全なサーバーサイドのロジックを持つことができます。
ServerStorage
ServerStorageには、サーバー専用のオブジェクトが含まれています。このコンテナを使用して、ランタイムでワークスペースや他のコンテナにクローンして親子関係を持たせたいオブジェクトを保存できます。たとえば、必要になるまでこのコンテナに大きなオブジェクト(マップなど)を保存し、要求されたときにのみワークスペースに移動することができます。これにより、最初の参加時のクライアントネットワークトラフィックを減らすことができます。
クライアント
クライアントコンテナサービスは、すべての接続クライアントに複製されるオブジェクトを対象としています。このカテゴリのコンテナは、すべての接続クライアントに複製され、通常は3Dオブジェクトと関連するLocalScriptオブジェクトを含みます。これらのコンテナに保存されているすべてのオブジェクトはセッションを超えて持続せず、クライアントが再参加するたびにリセットされます。プレイヤーGUI、クライアント側スクリプト、その他のクライアントにのみ関連するオブジェクトをこれらのコンテナに入れることができます。
クライアントがサーバーに接続すると、Playersコンテナサービスはユーザーがプレースに参加するのをリッスンし、各クライアントのためにPlayerオブジェクトを作成します。サーバーは編集データモデル内のクライアントコンテナからオブジェクトをコピーし、Playersオブジェクト内のランタイムデータモデルの対応する位置にコピーします。次の表は、オリジナルのコンテナと、クライアント上でコピーされる結果のコンテナを説明しています:
| 編集データモデル | ランタイムデータモデル | ノート |
|---|---|---|
| StarterPack | Player.Backpack | プレイヤーのインベントリを設定するスクリプトで、一般的にはToolオブジェクトを含むが、ローカルスクリプトも含むことが多い。 |
| StarterGui | Player.PlayerGui | プレイヤーのローカルGUIを管理できるスクリプト。プレイヤーが再生する際に、PlayerGuiの内容は空になります。サーバーはStarterGui内のオブジェクトをPlayerGuiにコピーします。 |
| StarterPlayerScripts | Player.PlayerScripts | クライアント用の一般目的のスクリプト。たとえば、特定の条件が満たされたときにクライアントで特別な効果を作成したい場合、このコンテナにローカルスクリプトを配置できます。サーバーはこのコンテナにアクセスできません。 |
| StarterCharacterScripts | Player.Character | プレイヤーがスポーン時にクライアントにコピーされるスクリプト。これらのスクリプトは、プレイヤーが再生する際には持続しません。 |
| ReplicatedFirst | このコンテナの内容は、最初にすべてのクライアントに複製されます(ただし、サーバーには戻りません)。 |
チャット
TextChatService
TextChatServiceは、チャネルの管理、メッセージの装飾、テキストのフィルタリング、コマンドの作成、カスタムチャットインターフェースの開発など、さまざまなゲーム内テキストチャットタスクを処理するサービスを表します。
詳細については、テキストチャットの概要を参照してください。
VoiceChatService
VoiceChatServiceは、他のユーザーとの距離に基づいて現実的なコミュニケーションをシミュレートする近接ベースのボイスチャット機能を表します。あなたは、このサービスを使用して機能をオンまたはオフに切り替えることができます。
詳細については、ボイスチャットを参照してください。
フォルダとモデル
データモデルにオブジェクトをグループ化するための2つの主要な方法があります:フォルダとモデル。両方ともオブジェクトのコンテナですが、目的は異なります。
- フォルダは、ロビーや戦闘アリーナなど、環境のセクションを保存するのに最適です。
- モデルは、椅子、テーブル、およびランプを含むデスクセットのような、オブジェクトのセットに使用されます。より複雑なセットを整理するために、モデルをモデル内にネストします。
オブジェクトには常に説明的な名前を付けるべきです。これにより、後で必要に応じてオブジェクトを見つけて変更するのが容易になります。

