unity-packages-services について
Unity Packages and Servicesは、Unityパッケージの管理とUnity Gaming Servicesの利用に関するスキルリファレンスです。Unity開発者向けに、パッケージソースやレジストリ、認証、クラウドセーブ、分析の手順を扱います。
主な機能
- 01UPMパッケージのインストールと管理
- 02Git URLパッケージとスコープ付きレジストリの設定
- 03パッケージの状態とバージョンの確認
- 04Unity Gaming Servicesの初期化
- 05認証とCloud Saveの利用
- 06同意に基づく分析データの記録
活用シーン
- 01プロジェクトのパッケージ依存関係の追加や更新
- 02スコープ付きレジストリによる社内パッケージの配布
- 03プレイヤーのサインインとクラウドデータの設定
- 04同意要件を守ったゲームイベントの計測
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ nice-wolf-studio/ unity-claude-skills --skill unity-packages-servicesインストール後、Claude Code で/unity-packages-servicesを入力して読み込まれたか確認します。
同梱ファイルreferences/common-packages.md
詳細
Unity パッケージとサービスのスキル
Package Manager のワークフロー
Package Manager ウィンドウ(Window > Package Manager からアクセス)では、UPM パッケージ、フィーチャーセット、アセットパッケージを管理します。
主なコンポーネント
- ナビゲーションパネル:パッケージのコンテキスト(Unity Registry、In Project、My Assets)を選択します
- 検索ボックス:名前でパッケージを検索します
- 並べ替えメニュー:名前または日付で並べ替えます
- フィルターメニュー:カテゴリまたはステータスで結果を絞り込みます
- 詳細パネル:パッケージ情報、バージョン、依存関係、変更履歴を確認します
- アクションボタン:パッケージのインストール、削除、更新、カスタマイズを行います
パッケージの状態
- リリース済み:現在の Unity バージョンで十分にテストされ、検証済みです
- プレリリース:利用可能ですが、まだ十分に検証されていません
- 実験的:不安定で、警告バッジが表示されます
- ビルトイン:ビルドサイズを削減するためにオン/オフを切り替えられる、Unity のコア機能です
- 非推奨:メンテナンスが終了しています
パッケージのインストールと管理
Package Manager UI 経由
- Window > Package Manager を開きます
- Unity Registry を選択して、利用可能なパッケージを表示します
- パッケージを選択し、Install をクリックします
- 更新するには、インストール済みのパッケージを選択し、新しいバージョンを選んで Update をクリックします
- 削除するには、インストール済みのパッケージを選択し、Remove をクリックします
manifest.json 経由
依存関係を追加するには、Packages/manifest.json を直接編集します:
{
"dependencies": {
"com.unity.addressables": "2.9.1",
"com.unity.cinemachine": "3.1.0",
"com.unity.inputsystem": "1.19.0"
}
}
Git URL 経由
Git リポジトリからパッケージを追加します:
{
"dependencies": {
"com.example.package": "https://github.com/user/repo.git#v1.0.0"
}
}
または Package Manager UI から、+ ボタンをクリックして Add package from git URL を選択します。
パッケージのカスタマイズ
- プロジェクトにコピー:Manage ドロップダウンを使うと、UPM パッケージをプロジェクトフォルダーにコピーして変更できます
- 変更可能なパッケージ:ローカルパッケージと埋め込みパッケージは、マニフェストを直接編集できます
- ビルトインの切り替え:使用していないビルトインパッケージを無効にして、ビルドサイズを削減します
スコープ付きレジストリ
スコープ付きレジストリを使用すると、Package Manager がカスタムパッケージレジストリサーバーと通信できるようになり、複数のパッケージコレクションに同時にアクセスできます。
主な用途
組織はスコープ付きレジストリを使用して、カスタムパッケージを社内に配布します。
設定
Packages/manifest.json に追加します:
{
"scopedRegistries": [
{
"name": "My Company Registry",
"url": "https://npm.mycompany.com",
"scopes": [
"com.mycompany",
"com.mycompany.tools"
]
}
],
"dependencies": {
"com.mycompany.core-utils": "1.0.0"
}
}
設定プロパティ
| プロパティ | 型 | 説明 |
|---|---|---|
name | String | Package Manager UI に表示される名前 |
url | String | npm 互換のレジストリサーバーエンドポイント |
scopes | Array | このレジストリにルーティングするパッケージの名前空間 |
スコープの照合ルール
- パッケージ名が完全一致する場合、優先されます
- 名前空間が長いものは、短いものより優先されます
- マッピングされていないパッケージは Unity の公式レジストリがデフォルトになります
- ワイルドカードと glob パターンはサポートされていません
- スコープには逆ドメイン表記(
@scopeではなくcom.example)を使用します
レジストリの互換性
レジストリサーバーは、/-/v1/search または /-/all エンドポイントを実装している必要があります。すべての npm レジストリに互換性があるわけではありません。
認証
保護されたレジストリでは、npm の認証パターンを使用して、Package Manager のユーザー設定ファイルで認証情報を設定します。
必須パッケージ一覧
Unity 6.3 LTS には、リリース済み(検証済み)パッケージが 133 個含まれています。ID とバージョンを含むカテゴリ別の完全な一覧は、references/common-packages.md を参照してください。
最もよく使われるパッケージ(クイックリファレンス)
| パッケージ | ID | バージョン |
|---|---|---|
| Input System | com.unity.inputsystem | 1.19 |
| Addressables | com.unity.addressables | 2.9 |
| Cinemachine | com.unity.cinemachine | 3.1 |
| Burst | com.unity.burst | 1.8 |
| Collections | com.unity.collections | 2.6 |
| Entities | com.unity.entities | 1.4 |
| Timeline | com.unity.timeline | 1.8 |
| Netcode for GameObjects | com.unity.netcode.gameobjects | 2.10 |
| Localization | com.unity.localization | 1.5 |
| ProBuilder | com.unity.probuilder | 6.0 |
| Visual Scripting | com.unity.visualscripting | 1.9 |
主要な UGS パッケージ
| パッケージ | ID |
|---|---|
| 認証 | com.unity.services.authentication |
| クラウドセーブ | com.unity.services.cloudsave |
| アナリティクス | com.unity.services.analytics |
| クラウドコード | com.unity.services.cloudcode |
| エコノミー | com.unity.services.economy |
| リーダーボード | com.unity.services.leaderboards |
| アプリ内課金 | com.unity.purchasing |
| リモート設定 | com.unity.remote-config |
Unity Gaming Services の概要
Unity Gaming Services(UGS)は、ゲームのライブ運用向けバックエンドサービス群です。認証、クラウドセーブ、クラウドコード、アナリティクス、エコノミー、リーダーボード、フレンド、マルチプレイヤー、マッチメーカーなどのサービスが含まれます。
UGS の始め方
- Edit > Project Settings > Services で Unity プロジェクトを UGS プロジェクトにリンクします
- Package Manager から必要なサービスパッケージをインストールします
- サービスを使用する前に、コードで初期化します
using Unity.Services.Core;
using UnityEngine;
public class ServicesInitializer : MonoBehaviour
{
async void Start()
{
await UnityServices.InitializeAsync();
Debug.Log("Unity Services initialized");
}
}
認証
Authentication サービスは、プレイヤーの ID 管理を提供します。com.unity.services.authentication をインストールします。
サインイン方法
- 匿名:認証情報は不要で、プレイヤー ID が自動生成されます
- プラットフォーム固有:Steam、PlayStation、Xbox、Apple、Google Play など
- カスタム認証:OAuth/OIDC 統合
- Unity Player Accounts:クロスプラットフォーム ID
匿名サインイン
using Unity.Services.Authentication;
using Unity.Services.Core;
using UnityEngine;
public class AuthManager : MonoBehaviour
{
async void Start()
{
await UnityServices.InitializeAsync();
AuthenticationService.Instance.SignedIn += () =>
{
Debug.Log($"Signed in. Player ID: {AuthenticationService.Instance.PlayerId}");
};
await AuthenticationService.Instance.SignInAnonymouslyAsync();
}
}
セッション管理
- セッションはアプリの再起動後も自動的に保持されます
- アクセストークンは自動的に更新されます
- 同じデバイスでは、セッションをまたいでもプレイヤー ID は一貫します
- 複数のサインイン方法を 1 つのプレイヤー ID にリンクして、クロスプラットフォームでプレイできます
主な API
| API | 用途 |
|---|---|
AuthenticationService.Instance.SignInAnonymouslyAsync() | 匿名サインイン |
AuthenticationService.Instance.PlayerId | 現在のプレイヤー ID を取得 |
AuthenticationService.Instance.IsSignedIn | サインイン状態を確認 |
AuthenticationService.Instance.SignOut() | 現在のプレイヤーをサインアウト |
AuthenticationService.Instance.AccessToken | 現在のアクセストークンを取得 |
Cloud Save
Cloud Save は、プレイヤーデータとゲーム状態をクラウドに保存します。com.unity.services.cloudsave をインストールします。
データの種類
- プレイヤーデータ:プレイヤーごとのキーと値のストレージ(設定、進行状況、インベントリ)
- ゲームデータ:すべてのプレイヤーで共有されるデータ(リーダーボードのスナップショット、ゲーム設定)
データの保存と読み込み
using Unity.Services.CloudSave;
using Unity.Services.Core;
using Unity.Services.Authentication;
using UnityEngine;
using System.Collections.Generic;
public class CloudSaveManager : MonoBehaviour
{
async void Start()
{
await UnityServices.InitializeAsync();
await AuthenticationService.Instance.SignInAnonymouslyAsync();
// Save data
var data = new Dictionary<string, object>
{
{ "playerLevel", 5 },
{ "playerName", "Hero" },
{ "highScore", 12500 }
};
await CloudSaveService.Instance.Data.Player.SaveAsync(data);
Debug.Log("Data saved to cloud");
// Load data
var keys = new HashSet<string> { "playerLevel", "highScore" };
var loadedData = await CloudSaveService.Instance.Data.Player.LoadAsync(keys);
if (loadedData.TryGetValue("playerLevel", out var levelItem))
{
int level = levelItem.Value.GetAs<int>();
Debug.Log($"Player level: {level}");
}
}
}
主な API
| API | 用途 |
|---|---|
CloudSaveService.Instance.Data.Player.SaveAsync() | プレイヤーのキーと値のデータを保存 |
CloudSaveService.Instance.Data.Player.LoadAsync() | キーを指定してプレイヤーデータを読み込み |
CloudSaveService.Instance.Data.Player.LoadAllAsync() | すべてのプレイヤーデータを読み込み |
CloudSaveService.Instance.Data.Player.DeleteAsync() | 特定のキーを削除 |
Analytics
Unity Analytics は、プレイヤーの行動とゲームイベントを追跡します。com.unity.services.analytics をインストールします。
イベントの種類
- 標準イベント:事前定義されたイベント(例:レベルクリア、トランザクション)
- カスタムイベント:開発者が定義する、カスタムパラメーター付きのイベント
イベントの記録
using Unity.Services.Analytics;
using Unity.Services.Core;
using UnityEngine;
public class AnalyticsManager : MonoBehaviour
{
async void Start()
{
await UnityServices.InitializeAsync();
AnalyticsService.Instance.StartDataCollection();
}
public void RecordLevelComplete(int level, float time)
{
var parameters = new Dictionary<string, object>
{
{ "levelIndex", level },
{ "completionTime", time },
{ "livesRemaining", 3 }
};
AnalyticsService.Instance.CustomData("levelComplete", parameters);
}
public void RecordPurchase(string itemId, float price)
{
var parameters = new Dictionary<string, object>
{
{ "itemId", itemId },
{ "price", price },
{ "currency", "USD" }
};
AnalyticsService.Instance.CustomData("itemPurchased", parameters);
}
}
データのプライバシー
- ユーザーの同意を得た後、
AnalyticsService.Instance.StartDataCollection()を呼び出します - GDPR、CCPA、およびプラットフォームのプライバシー要件を遵守します
- ユーザーが同意を撤回した場合は、
AnalyticsService.Instance.StopDataCollection()を使用します
主な API
| API | 用途 |
|---|---|
AnalyticsService.Instance.StartDataCollection() | アナリティクスデータの収集を開始 |
AnalyticsService.Instance.StopDataCollection() | データ収集を停止 |
AnalyticsService.Instance.CustomData() | パラメーター付きのカスタムイベントを記録 |
AnalyticsService.Instance.Flush() | キューにあるイベントを強制送信 |
よく使われるパターン
サービス初期化パターン
using Unity.Services.Core;
using Unity.Services.Authentication;
using UnityEngine;
public class GameBootstrap : MonoBehaviour
{
async void Awake()
{
try
{
await UnityServices.InitializeAsync();
await AuthenticationService.Instance.SignInAnonymouslyAsync();
Debug.Log($"Player ID: {AuthenticationService.Instance.PlayerId}");
// Now safe to use Cloud Save, Analytics, etc.
}
catch (ServicesInitializationException e)
{
Debug.LogError($"Services failed to initialize: {e.Message}");
}
catch (AuthenticationException e)
{
Debug.LogError($"Authentication failed: {e.Message}");
}
}
}
スクリプトによるパッケージ管理
#if UNITY_EDITOR
using UnityEditor.PackageManager;
public static class PackageHelper
{
// Install: Client.Add("[email protected]");
// Remove: Client.Remove("com.unity.cinemachine");
// List: Client.List(); // Returns ListRequest, poll IsCompleted
}
#endif
アンチパターン
-
サービスを使用する前に
UnityServicesを初期化しないこと。 必ず最初にUnityServices.InitializeAsync()を呼び出してください。すべての UGS サービスはこれに依存しています。 -
Cloud Save やその他のプレイヤーに紐づくサービスを使用する前に認証しないこと。 プレイヤーごとのデータにアクセスするには、事前に認証が必要です。
-
ユーザーの同意を得ずに分析データを収集すること。 同意を得た後にのみ
StartDataCollection()を呼び出してください。プライバシー規制に違反すると、法的措置やプラットフォームからの削除につながるおそれがあります。 -
Cloud Save に機密データを暗号化せずに保存すること。 Cloud Save はキーと値のストレージであり、安全な保管庫ではありません。機密データは保存前に暗号化してください。
-
互換性を確認せずに manifest.json でパッケージのバージョンをハードコードすること。 パッケージのバージョンが Unity のバージョンと互換性があることを必ず確認してください。Package Manager UI を使用して、検証済みのバージョンを確認してください。
-
バージョンやタグを固定せず、本番環境で git URL からパッケージをインストールすること。 予期しない破壊的変更を防ぐため、必ずタグまたはコミットハッシュ(例:
#v1.0.0)を指定してください。 -
サービスエラーを適切に処理しないこと。 UGS の呼び出しは非同期のネットワーク処理です。必ず try/catch で囲み、オフラインの状況にも対処してください。
-
動的コンテンツに Addressables ではなく
Resources.Loadを使用すること。 Resources フォルダーはビルド後に更新できません。Addressables ではリモートコンテンツを更新できます。 -
範囲が広すぎるスコープでスコープ付きレジストリを追加すること。
comのような広いスコープを指定すると、多くのパッケージがカスタムレジストリにルーティングされます。com.mycompanyのような具体的なスコープを使用してください。
API クイックリファレンス
| API | 目的 |
|---|---|
UnityServices.InitializeAsync() | すべての UGS サービスを初期化します |
AuthenticationService.Instance | 認証サービスにアクセスします |
CloudSaveService.Instance | クラウドセーブサービスにアクセスします |
AnalyticsService.Instance | 分析サービスにアクセスします |
UnityEditor.PackageManager.Client.Add() | スクリプトからパッケージをインストールします |
UnityEditor.PackageManager.Client.List() | インストール済みパッケージを一覧表示します |
UnityEditor.PackageManager.Client.Remove() | スクリプトからパッケージを削除します |
関連スキル
- unity-foundations — Unity の主要な概念、プロジェクトの設定、C# スクリプトの基礎
- unity-platforms — プラットフォームのターゲット設定、ビルドプロファイル、プラットフォーム固有の最適化