In Reuse code, you might have noticed frequent use of the game:GetService() method. Roblox services let you access the built-in features of the engine, like selling in-game items, enabling chat, playing sounds, animating objects, and managing instances.
実際、サービスはRoblox開発の最も基本的で一般的なパターンの最初のステップです:
- サービスを取得する。
- モジュールスクリプトを要求する。
- ローカル関数を追加する。
- それらの関数をトリガーするイベントを追加する。
たとえば、プレイヤーがゲームを退出したときに、ワールド内のプレイヤーの位置を保存したい場合があります:
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SaveManager = require(ReplicatedStorage:WaitForChild("SaveManager"))
-- モジュールスクリプトの再利用可能な関数を呼び出すローカル関数。
local function saveProgress(character)
-- プレイヤーのキャラクターの位置を取得します。
local position = character:FindFirstChild("HumanoidRootPart").Position
-- DataStoreServiceに書き込むためのモジュールスクリプトのsaveData関数を使用します。
SaveManager.saveData(character, position)
end
-- プレイヤーがゲームからキャラクターを削除したときにsaveProgress()を呼び出す別のローカル関数
-- (この場合、プレイヤーが離れたとき)。
local function onPlayerAdded(player)
player.CharacterRemoving:Connect(saveProgress)
end
-- プレイヤーが最初にゲームに接続したときにonPlayerAddedを呼び出します。
Players.PlayerAdded:Connect(onPlayerAdded)
いくつかの重要な詳細を含みます:
- 1つのスクリプトでサービスを1回だけ取得するべきなので、変数にサービスと同じ名前を付けるのが慣例です。この慣例はモジュールスクリプトにも適用されます。
- サービスは、データモデルのルートへの参照であるグローバル変数gameを使用して取得します。
- Robloxはロード順序に関する保証を行っていません(およびインスタンスストリーミングは、特定の時点で何がロードされているかをさらに複雑にします)ので、Instance:WaitForChild()を使用することは重要な安全対策です。
標準ライブラリ、グローバル関数と変数、またはサードパーティのライブラリを比較するのではなく、Roblox開発の大部分は、多くのサービスの中から、ゲームに必要な機能を追加するのに役立つものを特定することです。上記の例では、ディスクに書き込むために標準のI/Oライブラリを使用するのではなく、データを保存するためにクラウドサービスを使用します。
コンテナサービス
コンテナサービスは、他のオブジェクトを含めたり、影響を与えたりできます。これらのコンテナサービスはデータモデルのルートに存在し、StudioのExplorerウィンドウで表示されます。これらのコンテナサービスは集めて、データモデルの構造的な階層を形成するので、Robloxエンジンはプレースを正しく解釈してレンダーできます。以下の表には、一般的なコンテナサービスが含まれています。
| Service | Description |
|---|---|
| Workspace | 3Dワールドにレンダリングされるすべてのオブジェクト(パーツや地形など)を含みます。 |
| Lighting | AtmosphereやSkyなどのユニバーサル照明効果を設定するためのオブジェクトを含みます。 |
| ReplicatedStorage と ReplicatedFirst | サーバーとクライアント間でレプリケートされるコンテンツとロジックを含みます。 |
データモデルをさらに調べるために、これらのメソッドを使用できます:
- game:FindService() 指定されたサービスのインスタンスを検索します。
- game:GetChildren() データモデルのすべてのルート子供の配列を返します。これらは最上位のコンテナサービスです。
- game:GetDescendants() データモデルのすべての子孫の配列を返し、すべてのコンテナサービスとその子供を含みます。
コンテナサービスに関する詳細については、データモデルドキュメントを参照してください。
スクリプティングサービス
スクリプティングサービスは、スクリプト内部で呼び出すRobloxエンジンの標準機能を提供します。以下の表には、一般的なスクリプティングサービスが含まれています。
| Service | Description |
|---|---|
| TweenService | 他のインスタンスの数値プロパティを開始値から終了値まで内挿するために使用します。イージングの方向やスタイル、繰り返し、遅延のオプションがあります。 |
| MarketplaceService | 開発者製品、サブスクリプション、パス、Robloxプレミアムなどのゲーム内取引を促すためのサービスです。 |
| RunService | フレームごとの時間管理、ゲームが実行されているコンテキスト(サーバー、クライアント、スタジオモード)を確認するためのメソッドとイベントを含みます。すべてのランタイムフレームでプロセスや更新を実行するのに便利です。 |
| SoundService | ゲームでオーディオが再生される方法に関するさまざまなグローバルな側面を制御します。例としてドップラー スケールや音響効果があります。また、複数のオーディオ信号の音量とダイナミックエフェクトプロパティを同時に制御するためのサウンドグループを含むこともできます。 |
| CollectionService | サーバーからクライアントにレプリケートされるタグを持つインスタンスのグループ(コレクション)を管理し、関連するインスタンスのグループに対してより簡単に割り当てて作業できるようにします。 |
クラウドサービス
Robloxは、Robloxクラウドで発生するタスクやプロセスを処理するための特別なクラウドサービスも提供しています。以下の表には、一般的なクラウドサービスが含まれています。
| Service | Description |
|---|---|
| DataStoreService | セッション間で永続データを保存するためのものです。 |
| MemoryStoreService | 頻繁に変化する揮発性データを保存するためのものです。 |
| MessagingService | ライブセッション中に複数のサーバー間で通信するためのものです。 |
クラウドサービスには、対応するWeb APIもあり、外部スクリプトやツールからアクセス可能です。詳細については、Open Cloudを参照してください。