Unity 用 Google Play Games を設定してログインする

このドキュメントでは、Unity 用 Google Play Games プラグインを使用するように Unity プロジェクトを設定する方法について説明します。プラグインをインストールして Unity プロジェクトを構成する方法を学びます。このドキュメントでは、ログイン サービスを検証する方法についても説明します。

始める前に

ソフトウェア要件を確認します。Google Play Console を設定し、Unity Hub をインストールします。

プラグインのインストール

Unity 用 Google Play Games プラグインをダウンロードしてインストールするには、Unity Hub で次の手順を行います。

  1. GitHub リポジトリをダウンロードします。

  2. current-build ディレクトリで unitypackage ファイルを探します。このファイルはプラグインを表します。たとえば、次のようになります。

      current-build/GooglePlayGamesPluginForUnity-X.YY.ZZ.unitypackage
    

Unity プロジェクトを設定する

プレーヤー設定で Unity プロジェクトを設定する手順は次のとおりです。

  1. ゲーム プロジェクトを開きます。

  2. Unity Hub で、[Assets] > [Import Package] > [Custom Package] をクリックして、unitypackage ファイルをプロジェクトのアセットにインポートします。

  3. 現在のビルド プラットフォームが Android に設定されていることを確認します。

    1. メインメニューで、[File] > [Build Settings] をクリックします。

    2. [Android] を選択し、[Switch Platform] をクリックします。

    3. [Window] > [Google Play Games] に新しいメニュー項目が表示されます。表示されない場合は、[Assets] > [Refresh] をクリックしてアセットを更新し、もう一度ビルド プラットフォームを設定してみてください。

  4. Unity Hub で、[File] > [Build Settings] > [Player Settings] > [Other Settings] をクリックします。

  5. [Target API level] ボックスで、バージョンを選択します。

  6. [Scripting backend] ボックスに「IL2CPP」と入力します。

  7. [ターゲット アーキテクチャ] ボックスで、値を選択します。

  8. パッケージ名 package_name をメモします。この情報は後で使用できます。

Unity プロジェクトのプレーヤー設定
Unity プロジェクトのプレーヤー設定。

新しいキーストアを作成する

認証情報を検証するには、鍵が必要です。手順:

  1. Unity Hub で、[File] > [Build settings] > [Player settings] をクリックします。
  2. [公開設定] セクションで、[キーストア マネージャー] をクリックします。
    1. [キーストア マネージャー] ウィンドウで、[キーストア] > [新規作成] > [どこでも] をクリックします。
    2. フォルダを選択し、キーストアの名前を指定します。
    3. [パスワード] ボックスにパスワードを入力して確認します。
    4. [鍵を追加] をクリックします。

フォルダ名をメモします。この名前を使用して、Google Cloud で認証情報を作成できます。

Google Play Console から Android リソースをコピーする

Google Play Console で作成する各実績、リーダーボード、イベントには、Unity プロジェクトを設定するときに使用する Android リソースが含まれます。

ゲームの Android リソースを取得する手順は次のとおりです。

  1. Google Play Console でゲームを開きます。

  2. [Play ゲームサービス - 設定] ページ([成長] > [Play ゲームサービス] > [設定と管理] > [設定])で、[リソースを取得] をクリックします。

  3. [Resources] ウィンドウで、[Android(XML)] タブをクリックします。

  4. Android リソース(AndroidManifest.xml)のコンテンツを選択してコピーします。

Unity プロジェクトに Android リソースを追加する

Unity プロジェクトに次の Android リソースを追加します。

  1. Unity Hub で、[Window] > [Google Play Games] > [Setup] > [Android Setup] をクリックします。

    • [定数を保存するディレクトリ] フィールドに、定数ファイルのフォルダ名を入力します。
    • [Constants クラス名] フィールドに、作成する C# クラスの名前(名前空間を含む)を入力します。

      たとえば、C# クラスが id.cs で、[Assets] > [myproject] > [scripts] > [id.cs] に存在する場合。定数クラスの名前は myproject.scripts.id にできます。

    • [リソース定義] フィールドに、Google Play Console からコピーした Android リソースデータ(AndroidManifest.xml ファイル)を貼り付けます。

    • 省略可: [クライアント ID] フィールドに、リンクされたウェブアプリのクライアント ID を入力します。

      Google Cloud からゲームのクライアント ID を取得するには、クライアント ID の作成をご覧ください。

      ゲームにウェブベースのバックエンドがあり、バックエンド サーバーでサーバー認証コードをアクセス トークンと交換する必要がある場合、またはプレーヤーがゲーム以外の他の API 呼び出しを行うために ID トークンが必要になる場合にのみ必要です。

    • [セットアップ] をクリックします。これにより、クライアント ID を使用してゲームが構成され、各 Android リソースの定数を含む C# クラスが生成されます。

  2. Unity Hub で、[Window] > [Google Play Games] > [Setup] > [Nearby Connections Setup] をクリックします。

    • [Nearby 接続サービス ID] フィールドに package_name を入力します。

      Unity プロジェクトの設定で使用したのと同じ package_name を使用します。

    • [設定] をクリックします。

ソーシャル プラットフォームを選択する

Google Play Games サービス プラグインは、Unity のソーシャル インターフェースを実装しています。これにより、他のプラットフォームと統合する際に、すでにそのインターフェースを使用しているゲームとの互換性が確保されます。ただし、一部の機能は Play ゲームに固有のものであり、Unity が提供する標準のソーシャル インターフェースの拡張機能として提供されます。

標準 API 呼び出しには、ISocialPlatform インターフェースへの参照である Social.Active オブジェクトを介してアクセスできます。標準以外の Google Play ゲームサービス拡張機能にアクセスするには、Social.Active オブジェクトを追加メソッドが利用可能な PlayGamesPlatform クラスにキャストします。

デフォルトのソーシャル プラットフォームをオーバーライドせずにプラグインを使用する

PlayGamesPlatform.Activate を呼び出すと、Google Play Games サービスがデフォルトのソーシャル プラットフォームの実装になります。つまり、SocialSocial.Active のメソッドへの静的な呼び出しが Google Play Games サービス プラグインによって行われます。これは、プラグインを使用するほとんどのゲームの動作です。

ただし、なんらかの理由でデフォルトの実装にアクセスできる状態を保持する必要がある(例: 実績とリーダーボードを別のソーシャル プラットフォームに送信するために使用する)場合は、デフォルトのプラグインをオーバーライドすることなく Google Play Games サービス プラグインを使用できます。そのためには、次のような処理を行います。

  1. PlayGamesPlatform.Activate を呼び出さない
  2. XyzSocial クラスで呼び出すメソッドの名前である場合は、Social.Xyz を呼び出さないでください。代わりに PlayGamesPlatform.Instance.Xyz を呼び出します。
  3. Google Play Games サービスを操作する場合は Social.Active を使用しないでください。代わりに、PlayGamesPlatform.Instance を使用してください。

これにより、スコアや実績を 2 つ以上のソーシャル プラットフォームに同時に送信することも可能です。

    // Submit achievement to original default social platform
    Social.ReportProgress("MyAchievementIdHere", 100.0f, callback);

    // Submit achievement to Google Play
    PlayGamesPlatform.Instance.ReportProgress("MyGooglePlayAchievementIdHere", 100.0f, callback);

ログイン サービスを確認する

ゲームを開くと、ログイン サービスを使用して自動的に Play ゲームサービスへの接続が試行されます。接続に成功すると、ゲームにログイン プロンプトが表示され、Unity 用 Google Play ゲームサービス プラグインを使用できるようになります。

ユーザーがデバイスで Google Play Games サービスを一度も使用したことがない場合、ユーザーは Play Games アカウントを作成するための、1 回限りの設定画面に自動的にリダイレクトされます。

スクリプトの Start メソッドで、自動ログインの試行結果をリッスンし、認証ステータスを取得して、ユーザーがログインしていない場合は Play ゲームサービス機能を無効にします。

Unity プラグインのバージョンが v11 より前の場合は、ログイン機能を使用できません。

    using GooglePlayGames;

    public void Start() {
      PlayGamesPlatform.Instance.Authenticate(ProcessAuthentication);
    }

    internal void ProcessAuthentication(SignInStatus status) {
      if (status == SignInStatus.Success) {
        // Continue with Play Games Services
      } else {
        // Disable your integration with Play Games Services or show a login button
        // to ask users to sign-in. Clicking it should call
        // PlayGamesPlatform.Instance.ManuallyAuthenticate(ProcessAuthentication).
      }
    }

結果コードは列挙型であり、ログインに失敗した理由を特定するために使用できます。

Unity のソーシャル プラットフォームを使用する場合は、以下のコードを使用することもできます。

  using GooglePlayGames;

  public void Start() {
    PlayGamesPlatform.Activate();
    Social.localUser.Authenticate(ProcessAuthentication);
  }

Authenticate から成功値が返されるまで、Google Play Games Services API 呼び出しは行えません。そのため、コールバックが呼び出されるまで待機画面を表示し、認証が完了するまでユーザーがゲームを開始できないようにすることをおすすめします。

」をご覧ください。

Play アプリ署名を使用する

Google は、Play アプリ署名を使用してアプリの署名鍵を管理、保護します。Play アプリ署名を使用すると、最適化された配布用の Android App Bundle ファイルに署名できます。Play アプリ署名は、Google の安全なインフラストラクチャにアプリ署名鍵を保存します。Play アプリ署名を使用するには、まず Unity Hub から AAB ファイルを作成してダウンロードする必要があります。その後、AAB ファイルを Google Play Console にアップロードして、内部テスト リリースを作成できます。

AAB ファイルを作成する

Unity Hub で AAB ファイルを作成する手順は次のとおりです。

  1. Unity Hub で、[File] > [Build settings] をクリックします。
  2. [Build App Bundle ( Google Play )] を選択します。

    詳しくは、Android ビルド設定のリファレンスをご覧ください。

  3. [Build] をクリックします。

  4. Unity Hub から AAB ファイルをダウンロードします。

内部テスト版リリースを作成する

Google Play Console で内部テスト版リリースを作成してテスターを追加する手順は次のとおりです。

  1. Google Play Console でゲームを選択します。
  2. [テストとリリース] ページ([テスト] > [内部テスト])に移動します。
  3. [アップロード] をクリックして、AAB ファイルを選択します。
  4. [リリース詳細] フィールドに名前を入力します。
  5. [次へ] をクリックして、リリースの詳細を確認します。
  6. [保存して公開] をクリックします。
  7. [テスター] タブで、[メーリング リストを作成] をクリックして、最大 100 人のテスターを追加します。

    詳しくは、内部テスト版: 最大 100 人のテスターを管理するをご覧ください。

  8. [フィードバック用の URL またはメールアドレス] に、フィードバックを送信するためのフィードバック URL またはメールアドレスを入力します。

  9. [Save] をクリックします。

アプリ署名認証情報を確認する

  1. Google Play Console でゲームを選択します。
  2. [テストとリリース] ページ([設定> アプリ署名])に移動します。
  3. アプリ署名認証情報を確認します。

プロジェクトをビルドして実行する

この時点で、ゲーム プロジェクトをビルドして実行できます。ゲームが起動すると、自動ログインの試行が表示されます。

USB デバッグが有効になっている Android 搭載の物理デバイス、または開発したプロジェクトを実行できるエミュレータが必要です。

サーバー認証コードを取得する

現在のプレーヤーに代わってバックエンド ウェブサーバーで Google API にアクセスするには、クライアント アプリケーションから認証コードを取得し、取得したコードをウェブサーバー アプリケーションに渡す必要があります。その後、コードをアクセス トークンと交換することで、さまざまな API を呼び出すことができます。ワークフローの詳細については、ウェブ向け Google ログインをご覧ください。

サーバー側のアクセスコードを取得するには:

  1. Google Play Console でゲームのウェブ クライアント ID を追加します。
    1. Google Play Console でゲームを選択します。
    2. [設定] ページ([ユーザーを増やす] > [Play ゲームサービス] > [設定と管理] > [設定])で、[認証情報を追加] をクリックします。
    3. [認証情報を追加] ページで、[ゲームサーバー] を選択します。
    4. OAuth 2.0 クライアント ID を生成します
    5. クライアント ID の値をメモします。この値は後で指定する必要があります。
  2. ウェブ クライアント ID を Unity Hub に追加します。

    1. Unity Hub で、Unity 用 Google Play Games とログインを設定します。
    2. Unity Hub で、[Window] > [Google Play Games] > [Setup] > [Android Setup] に移動します。
    3. クライアント ID の値を入力します。
  3. 追加のスコープのサーバー認証コードを取得します。

    C#

    using GooglePlayGames.BasicApi;
    
    // Define selectedScope having additional identity scopes.
    private List selectedScopes = new List();
    
    // Add scopes you want to request.
    selectedScopes.Add(AuthScope.OPEN_ID);
    selectedScopes.Add(AuthScope.PROFILE);
    selectedScopes.Add(AuthScope.EMAIL);
    
    // Call RequestServerSideAccess with additional scopes and retrieve
    // authcode and grantedscopes list.
    PlayGamesPlatform.Instance.RequestServerSideAccess(
        /* forceRefreshToken= */ false,selectedScopes
        (AuthResponse authResponse) =>
        {
        string authCode = authResponse.GetAuthCode();
        List grantedScopes = authResponse.GetGrantedScopes();
    
        // send authCode to server...
    });

機能の設定と追加