Unity Gaming ServicesのAuthentication
Unity Gaming Services (UGS)
には、プレイヤーの認証を簡単に管理できるAuthentication
という強力な機能が用意されています。
Authentication
を使用すると、プレイヤー個人を識別できるため、機種変更や複数のデバイス間で進行状況を共有できるようになります。
また、Authentication
は複数のアイデンティティプロバイダをサポートしており、
Google アカウントや Apple アカウントなどを使用したログイン方法にも対応できます。
Authenticationを使用するための準備
UnityEditor
上でPackage Manager
を開きます。
- 左側の雲のアイコンを選択します。
UGS
用のパッケージが表示されるので、Authentication
を選択します。Install
をクリックします。
インストールが完了すると、Project Settings
のServices
セクションの下に
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 Authentication→IDプロバイダーと進むと、現在の認証プロバイダーの設定を確認できます。
ここでは、匿名認証以外にも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 を活用して、より快適で便利なゲーム体験を提供していきましょう!