mcpField
U
unity-packages-services

unity-packages-services

github.com/nice-wolf-studio開発4060 回インストール6 週間前に更新
リポジトリ

unity-packages-services について

Unity Packages and Servicesは、Unityパッケージの管理とUnity Gaming Servicesの利用に関するスキルリファレンスです。Unity開発者向けに、パッケージソースやレジストリ、認証、クラウドセーブ、分析の手順を扱います。

主な機能

  1. 01UPMパッケージのインストールと管理
  2. 02Git URLパッケージとスコープ付きレジストリの設定
  3. 03パッケージの状態とバージョンの確認
  4. 04Unity Gaming Servicesの初期化
  5. 05認証とCloud Saveの利用
  6. 06同意に基づく分析データの記録

活用シーン

  1. 01プロジェクトのパッケージ依存関係の追加や更新
  2. 02スコープ付きレジストリによる社内パッケージの配布
  3. 03プレイヤーのサインインとクラウドデータの設定
  4. 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 経由
  1. Window > Package Manager を開きます
  2. Unity Registry を選択して、利用可能なパッケージを表示します
  3. パッケージを選択し、Install をクリックします
  4. 更新するには、インストール済みのパッケージを選択し、新しいバージョンを選んで Update をクリックします
  5. 削除するには、インストール済みのパッケージを選択し、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"
    }
}
設定プロパティ
プロパティ型説明
nameStringPackage Manager UI に表示される名前
urlStringnpm 互換のレジストリサーバーエンドポイント
scopesArrayこのレジストリにルーティングするパッケージの名前空間
スコープの照合ルール
  • パッケージ名が完全一致する場合、優先されます
  • 名前空間が長いものは、短いものより優先されます
  • マッピングされていないパッケージは Unity の公式レジストリがデフォルトになります
  • ワイルドカードと glob パターンはサポートされていません
  • スコープには逆ドメイン表記(@scope ではなく com.example)を使用します
レジストリの互換性

レジストリサーバーは、/-/v1/search または /-/all エンドポイントを実装している必要があります。すべての npm レジストリに互換性があるわけではありません。

認証

保護されたレジストリでは、npm の認証パターンを使用して、Package Manager のユーザー設定ファイルで認証情報を設定します。

必須パッケージ一覧

Unity 6.3 LTS には、リリース済み(検証済み)パッケージが 133 個含まれています。ID とバージョンを含むカテゴリ別の完全な一覧は、references/common-packages.md を参照してください。

最もよく使われるパッケージ(クイックリファレンス)
パッケージIDバージョン
Input Systemcom.unity.inputsystem1.19
Addressablescom.unity.addressables2.9
Cinemachinecom.unity.cinemachine3.1
Burstcom.unity.burst1.8
Collectionscom.unity.collections2.6
Entitiescom.unity.entities1.4
Timelinecom.unity.timeline1.8
Netcode for GameObjectscom.unity.netcode.gameobjects2.10
Localizationcom.unity.localization1.5
ProBuildercom.unity.probuilder6.0
Visual Scriptingcom.unity.visualscripting1.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 の始め方
  1. Edit > Project Settings > Services で Unity プロジェクトを UGS プロジェクトにリンクします
  2. Package Manager から必要なサービスパッケージをインストールします
  3. サービスを使用する前に、コードで初期化します
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

アンチパターン

  1. サービスを使用する前に UnityServices を初期化しないこと。 必ず最初に UnityServices.InitializeAsync() を呼び出してください。すべての UGS サービスはこれに依存しています。

  2. Cloud Save やその他のプレイヤーに紐づくサービスを使用する前に認証しないこと。 プレイヤーごとのデータにアクセスするには、事前に認証が必要です。

  3. ユーザーの同意を得ずに分析データを収集すること。 同意を得た後にのみ StartDataCollection() を呼び出してください。プライバシー規制に違反すると、法的措置やプラットフォームからの削除につながるおそれがあります。

  4. Cloud Save に機密データを暗号化せずに保存すること。 Cloud Save はキーと値のストレージであり、安全な保管庫ではありません。機密データは保存前に暗号化してください。

  5. 互換性を確認せずに manifest.json でパッケージのバージョンをハードコードすること。 パッケージのバージョンが Unity のバージョンと互換性があることを必ず確認してください。Package Manager UI を使用して、検証済みのバージョンを確認してください。

  6. バージョンやタグを固定せず、本番環境で git URL からパッケージをインストールすること。 予期しない破壊的変更を防ぐため、必ずタグまたはコミットハッシュ(例:#v1.0.0)を指定してください。

  7. サービスエラーを適切に処理しないこと。 UGS の呼び出しは非同期のネットワーク処理です。必ず try/catch で囲み、オフラインの状況にも対処してください。

  8. 動的コンテンツに Addressables ではなく Resources.Load を使用すること。 Resources フォルダーはビルド後に更新できません。Addressables ではリモートコンテンツを更新できます。

  9. 範囲が広すぎるスコープでスコープ付きレジストリを追加すること。 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 — プラットフォームのターゲット設定、ビルドプロファイル、プラットフォーム固有の最適化

追加リソース

コメント