Unity Gaming Services でライブゲームを構築する
UGS パッケージ
| パッケージ | 最小バージョン | 目的 |
|---|---|---|
com.unity.services.core | 1.16.0 | 初期化、依存関係グラフ |
com.unity.services.authentication | 3.6.1 | プレイヤーサインインとID |
com.unity.services.cloudcode | 2.10.3 | サーバー権威の C# モジュール |
com.unity.services.cloudsave | 3.4.0 | プレイヤー別および共有のキー・バリューストレージ |
com.unity.remote-config | 4.2.5 | サーバーサイドのゲーム設定 |
com.unity.services.deployment | 1.7.2 | エディタからクラウドリソースをデプロイ |
com.unity.services.tooling | 1.4.1 | アクセス制御とゲームオーバーライド |
com.unity.services.apis | 1.1.1 | すべてのUGSサービス用の生成RESTクライアント |
- 初期化パターン
- パッケージマップ
- アーキテクチャ — パッケージの組み合わせ方
- コアサービス — クイックリファレンス
- アセットストアのビルディングブロック
- レディメイド機能ブループリント
- 一般的なアーキテクチャパターン
- 検証
- デプロイチェックリスト
- 詳細リファレンス
初期化パターン
すべてのUGSゲームは同じ方法で始まります。com.unity.services.core が最初に初期化され、その後プレイヤーがサインインします:
using Unity.Services.Core;
using Unity.Services.Authentication;
await UnityServices.InitializeAsync();
await AuthenticationService.Instance.SignInAnonymouslyAsync();
// 他のすべてのサービスが利用可能になります
InitializeAsync() が完了すると、サービスシングルトン(例:CloudSaveService.Instance、CloudCodeService.Instance)が使用可能になります。
パッケージマップ
基盤
| パッケージ | 目的 | シングルトン / エントリポイント |
|---|---|---|
| Core | 初期化、依存関係グラフ、コンポーネントレジストリ | UnityServices.InitializeAsync() |
| Authentication | プレイヤーサインイン(匿名、ソーシャル、Unity、ユーザー名/パスワード)、ID | AuthenticationService.Instance |
| Services APIs | すべてのUGSサービス用の生成RESTクライアント、サービスアカウントによる管理APIアクセス | 直接APIクラス |
プレイヤーデータと設定
| パッケージ | 目的 | シングルトン / エントリポイント |
|---|---|---|
| Cloud Save | プレイヤー別のキー・バリューデータ(Default、Public、Protected)およびゲーム全体のCustomデータ | CloudSaveService.Instance.Data.Player / .Data.Custom |
| Remote Config | サーバーサイドのゲーム設定、フィーチャーフラグ、JSON定義 | RemoteConfigService.Instance |
| Economy | 仮想通貨、インベントリアイテム、購入、ストア | EconomyService.Instance |
サーバーロジックとセキュリティ
| パッケージ | 目的 | シングルトン / エントリポイント |
|---|---|---|
| Cloud Code | 信頼できる書き込みと検証のためのサーバー権威 C# モジュール | CloudCodeService.Instance → CallModuleEndpointAsync |
| Tooling | アクセス制御(.ac)とゲームオーバーライド(.ugo)ファイルの作成とデプロイ | エディタのみ(Deployment Window) |
| Deployment | Unity エディタからクラウドリソース(.rc、.ac、.ccmr、.lb など)をデプロイ | エディタのみ(Services > Deployment) |
ソーシャルと競技
| パッケージ | 目的 | シングルトン / エントリポイント |
|---|---|---|
| Multiplayer | セッション、マッチメイキング、ロビー。ビルディングブロック:マルチプレイヤーセッション、マッチメーカーセッション、サーバーセッション | MultiplayerService.Instance |
| Leaderboards | スコア提出、ランキング、ティア、バージョン履歴。ビルディングブロック:リーダーボード | LeaderboardsService.Instance |
テレメトリー
| パッケージ | 目的 | シングルトン / エントリポイント |
|---|---|---|
| Analytics | カスタムイベント、標準イベント、同意管理 | AnalyticsService.Instance |
アーキテクチャ — パッケージの組み合わせ方
UnityServices.InitializeAsync()
│
▼
AuthenticationService
(サインイン → PlayerId)
│
┌───────────────┼───────────────┐
▼ ▼ ▼
Remote Config Cloud Save Economy
(ゲーム設定、 (プレイヤー状態、 (通貨、
定義、 進行、 インベントリ、
フィーチャー 設定) 購入)
フラグ)
│ │ │
└───────┬───────┘ │
▼ │
Cloud Code │
(サーバー権威 │
書き込み、検証、 ◄─────────┘
アンチチートロジック)
│
┌───────┼───────┐
▼ ▼ ▼
Cloud Save Economy Leaderboards
(Protected (サーバー (スコア
書き込み) 付与) 提出)
重要な原則: ゲームの整合性に影響を与えるデータ(XP、報酬、通貨)は、Cloud Code モジュールを介して書き込みをルーティングします。直接のクライアント書き込みは、機密性の低いデータ(設定、表示設定)にのみ適しています。
コアサービス — クイックリファレンス
Authentication
パッケージ: com.unity.services.authentication (>= 3.6.1)
プレイヤーのIDを処理します。サインイン方法:匿名、ソーシャルプロバイダー(Google、Apple、Steam、Facebook、Oculus など)、Unity ブラウザ、ユーザー名/パスワード、デバイスコードフロー。
サインイン後:PlayerId と PlayerName が利用可能になります。すべてのサインイン方法は SignedIn イベントを発火します。PlayerAccountService(Unity ブラウザサインイン用)は 別のアセンブリ(Unity.Services.Authentication.PlayerAccounts)にあります。
- 詳細リファレンス: references/authentication.md
- ビルディングブロック: プレイヤーアカウント — レディメイドのサインインUIとID管理
Cloud Code
パッケージ: com.unity.services.cloudcode (>= 2.10.3)
信頼できる操作のために、サーバーサイドの C# モジュール(.NET 9)を実行します。モジュールは .ccmr ファイルとしてデプロイされます。クライアントは次のように呼び出します:
var result = await CloudCodeService.Instance.CallModuleEndpointAsync<TResult>(
"ModuleName", "FunctionName", args);
本番環境では、JavaScript スクリプトよりも C# モジュールを推奨します。モジュールは、サブスクリプションを介したリアルタイムプッシュメッセージ、イベント駆動型トリガー、マルチプレイヤーセッションスコープもサポートしています。
- 詳細リファレンス: references/cloud-code.md
Cloud Save
パッケージ: com.unity.services.cloudsave (>= 3.4.0)
3つのアクセスクラスに加えて、ゲーム全体のCustomデータを持つプレイヤー別のキー・バリューストレージ:
| アクセスクラス | 読み取り | 書き込み | ユースケース |
|---|---|---|---|
| Default | 所有者 | 所有者 | プライベート設定、環境設定 |
| Public | 全員 | 所有者 | 公開プロフィール、表示名 |
| Protected | 所有者 | サーバーのみ(Cloud Code) | アンチチートデータ、サーバー付与された状態 |
| Custom | 任意のプレイヤー | サーバーのみ | 共有ゲーム状態、グローバル設定 |
値は JSON としてシリアライズされます。SaveItem による書き込みロック同時実行制御、QueryAsync によるサーバーサイドクエリ、およびバイナリファイルストレージをサポートしています。
- 詳細リファレンス: references/cloud-save.md
- ビルディングブロック: 実績 で使用