Unity Gaming ServicesのAuthentication

Unity Gaming Services (UGS)には、プレイヤーの認証を簡単に管理できるAuthenticationという強力な機能が用意されています。

Authenticationを使用すると、プレイヤー個人を識別できるため、機種変更や複数のデバイス間で進行状況を共有できるようになります。

また、Authenticationは複数のアイデンティティプロバイダをサポートしており、

Google アカウントや Apple アカウントなどを使用したログイン方法にも対応できます。

Authenticationを使用するための準備

UnityEditor上でPackage Managerを開きます。

  1. 左側の雲のアイコンを選択します。
  2. UGS用のパッケージが表示されるので、Authenticationを選択します。
  3. Installをクリックします。

インストールが完了すると、Project SettingsServicesセクションの下に

Authenticationが追加されています。

匿名認証

ゲームを初めて遊ぶユーザーが認証を意識せずに利用できるように、

匿名認証 (SignInAnonymously) のメソッドが用意されています。

以下のコードを用意しました。

using Unity.Services.Authentication;
using Unity.Services.Core;
using UnityEngine;

public class AuthenticationTest : MonoBehaviour
{
    private async void Start()
    {
        // UGS SDKの初期化
        await UnityServices.Instance.InitializeAsync();
        
        // 匿名認証
        await AuthenticationService.Instance.SignInAnonymouslyAsync();
    }
}

UGS の初期化を先に行います。

Taskで実装されているため、awaitを使用して処理の完了を待つことができます。

その後、AuthenticationService.Instance.SignInAnonymouslyAsync()を呼び出すだけで、ユーザーの認証情報が作成されます。

アプリを再起動しても認証情報は保持されているため、同じユーザーとして継続して遊ぶことができます。

ダッシュボードのPlayer Managementで、作成されたユーザーを確認できます。

サインイン時のイベント

サインイン用のメソッドを呼ぶ前に、以下のコールバックを設定しておくことで、サインインの結果やサインアウトのタイミングを把握できます。

  • SignedIn:サインイン成功時に呼ばれる
  • SignedOut:ユーザーがサインアウトした際に呼ばれる
  • SignInFailed:サインインに失敗した際に呼ばれる

これらを設定しておくと、ユーザーの状態を適切に管理しやすくなります。

using Unity.Services.Authentication;
using Unity.Services.Core;
using UnityEngine;

public class AuthenticationTest : MonoBehaviour
{
    private async void Start()
    {
        // UGS SDKの初期化
        await UnityServices.Instance.InitializeAsync();
        
        AuthenticationService.Instance.SignedIn += () =>
        {
            // サインイン出来た
            Debug.Log($"Signed in");
        };
        AuthenticationService.Instance.SignedOut += () =>
        {
            // サインアウトした
            Debug.Log($"Signed out");
        };
        AuthenticationService.Instance.SignInFailed += (error) =>
        {
            // サインイン失敗
            Debug.LogError($"Authentication failed: {error}");
        };
        
        // 匿名認証
        await AuthenticationService.Instance.SignInAnonymouslyAsync();
    }
}

サインアウトさせたい場合は、AuthenticationService.Instance.SignOut() を呼びます。

プレイヤーの名前

サインインした状態で、以下のメソッドを呼び出すことで、ユーザーの情報を確認できます。

プレイヤー情報

  var playerInfo = await AuthenticationService.Instance.GetPlayerInfoAsync();
  Debug.Log($"Player ID: {playerInfo.Id}");

プレイヤーの名前

サインインした直後は仮の名前が付いています。

  var playerName = await AuthenticationService.Instance.GetPlayerNameAsync();
  Debug.Log($"Player Name: {playerName}");

プレイヤーの名前を変更する

名前を変更するには、UpdatePlayerNameAsyncを呼び出します。

実際のゲームでは、プレイヤーに名前を入力してもらうUIを用意し、その値を適用するようにしましょう。

await AuthenticationService.Instance.UpdatePlayerNameAsync("NewName");

サービスアカウントとの関連付け

ダッシュボードでPlayer AuthenticationIDプロバイダーと進むと、現在の認証プロバイダーの設定を確認できます。

ここでは、匿名認証以外にもGoogle、Apple、Facebookなどの外部IDプロバイダーを設定し、プレイヤーがそれらのアカウントでログインできるようにすることが可能です。

各種サービス(Google、Apple、Facebook など)から提供される情報を登録することで、

それらのアカウントを使用した認証が可能になります。

また、Unity Authentication には、各サービスでサインインするための専用メソッドが用意されています。

これにより、プレイヤーは匿名認証だけでなく、任意の外部アカウントでサインインし、

進行状況を異なるデバイス間で共有できるようになります。

// Googleアカウントでサインイン
AuthenticationService.Instance.SignInWithGoogleAsync

// Appleアカウントでサインイン
AuthenticationService.Instance.SignInWithAppleAsync

などなど。

既存のユーザーを各サービスと紐付ける(リンクする)ことで、匿名認証から正式なアカウントに移行したり、

複数のログイン方法を提供したりできます。

また、紐付けを解除(アンリンク)するメソッドも用意されており、プレイヤーが任意のログイン方法を変更することも可能です。

この機能を活用することで、ユーザーの利便性を向上させつつ、柔軟な認証管理が可能になります。

// Googleアカウントと紐付ける
AuthenticationService.Instance.LinkWithGoogleAsync

// Googleアカウントとの紐付けを解除する
AuthenticationService.Instance.UnlinkGoogleAsync

まとめ

今回は、UGS のAuthenticationについて解説しました。

ゲーム開発では、プレイヤーごとのユーザー情報を適切に管理することが重要です。

端末内で完結するゲームではあまり意識しないかもしれませんが、

UGS を活用することで機種変更後もデータを引き継ぎ、スムーズにプレイを続けることが可能になります。

また、クラウドセーブやランキング機能など、UGS の他のサービスと連携する際にもAuthenticationは欠かせません。

UGS を活用して、より快適で便利なゲーム体験を提供していきましょう!

🔗関連ページ