メインコンテンツまでスキップ

SDK の実装 - ログインキュー - (Unity モジュール)

Last updated on February 4, 2026

注釈:本資料はAI技術を用いて翻訳されています。

注記

ログインキュー機能を統合するには、AccelByte Unity SDK のログイン関数の V4 バージョン(例: LoginWithDeviceIdV4() または LoginWithOtherPlatformV4())を使用する必要があります。これらの関数は OptionalParameters オブジェクトの受け渡しをサポートしており、ログインキューが正常に機能するために必要です。

Byte Wars の認証チュートリアルモジュールは、すでにこれらの V4 関数を使用しています。そのため、最初からチュートリアルに従っている場合は、準備が整っています。

ラッパーを開く

このチュートリアルでは、AccelByte Gaming Services (AGS) Game SDK を使用してログインキューとログインのキャンセルを実装する方法を学びます。Byte Wars には LoginQueueWrapper_Starter.cs という名前のラッパーファイルがあり、このチュートリアルに従ってこれらの機能をゼロから実装するために使用します。

以下の図は、ログインキュー機能が SDK とどのように連携するかを示しています。

スターターパックの内容

変更するためのスタータークラス LoginQueueWrapper_Starter が提供されています。これはリソースセクションで入手できます。

  • LoginQueueWrapper_Starter ファイル: /Assets/Resources/Modules/Access/LoginQueue/Scripts/LoginQueueWrapper_Starter.cs

このクラスには、すでにいくつかの準備が整っています:

  • AccelByte SDK のオブジェクトの使用を可能にするライブラリ。
using AccelByte.Models;
  • 他のモジュールのラッパーへの参照。ログインキュー機能は、デリゲートとキャンセルトークンを含む OptionalParameters オブジェクトをログイン関数に渡すことで機能します。Byte Wars は個別の認証モジュールを使用しているため、このクラスはログイン関数を直接変更する代わりに、対応するモジュールに OptionalParameters を割り当てます。これにより、ゲームは変更なしにこれらのモジュールから元のログイン関数を呼び出し続けることができます。
private AuthEssentialsWrapper authEssentialsWrapper;
private SinglePlatformAuthWrapper singlePlatformAuthWrapper;
private AuthEssentialsWrapper_Starter authEssentialsWrapper_Starter;
private SinglePlatformAuthWrapper_Starter singlePlatformAuthWrapper_Starter;
private void Start()
{
authEssentialsWrapper = TutorialModuleManager.Instance.GetModuleClass<AuthEssentialsWrapper>();
singlePlatformAuthWrapper = TutorialModuleManager.Instance.GetModuleClass<SinglePlatformAuthWrapper>();
authEssentialsWrapper_Starter = TutorialModuleManager.Instance.GetModuleClass<AuthEssentialsWrapper_Starter>();
singlePlatformAuthWrapper_Starter = TutorialModuleManager.Instance.GetModuleClass<SinglePlatformAuthWrapper_Starter>();
}

ログインキューコールバックの実装

  1. LoginQueueWrapper_Starter ファイルを開き、後で UI を処理するための新しいデリゲートを宣言します。

    public Action<LoginQueueTicket> OnLoginQueued = delegate {};
  2. OnQueued() という新しい関数を作成します。この関数は、ゲームが新しいログインキューの更新を受信するたびにトリガーされます。ログインキューメニューを表示し、更新されたキュー情報を渡してデリゲートを呼び出します。

    private void OnQueued(LoginQueueTicket queueTicket)
    {
    BytewarsLogger.Log($"Login queued.");

    // 現在の UI がログインキューでない場合は UI を表示
    if (MenuManager.Instance.GetCurrentMenu().GetAssetEnum() != AssetEnum.LoginQueueMenu_Starter)
    {
    MenuManager.Instance.ChangeToMenu(TutorialType.LoginQueue);
    }

    OnLoginQueued?.Invoke(queueTicket);
    }
  3. Start() 関数に移動し、既存のコードを以下のコードに置き換えます。このコードは、認証モジュールのラッパーを取得し、その OptionalParameters.OnQueueUpdatedEvent イベントに OnQueued() 関数を割り当てます。これにより、ユーザーがこれらのラッパーを使用してログインすると、OnQueueUpdatedEventLoginQueueWrapper_Starter クラスによって処理されます。

    private void Start()
    {
    authEssentialsWrapper = TutorialModuleManager.Instance.GetModuleClass<AuthEssentialsWrapper>();
    singlePlatformAuthWrapper = TutorialModuleManager.Instance.GetModuleClass<SinglePlatformAuthWrapper>();
    authEssentialsWrapper_Starter = TutorialModuleManager.Instance.GetModuleClass<AuthEssentialsWrapper_Starter>();
    singlePlatformAuthWrapper_Starter = TutorialModuleManager.Instance.GetModuleClass<SinglePlatformAuthWrapper_Starter>();

    // キューに入れられたアクションとキャンセルされたアクションをバインド
    if (authEssentialsWrapper != null)
    {
    authEssentialsWrapper.OptionalParameters.OnQueueUpdatedEvent = OnQueued;
    }
    if (singlePlatformAuthWrapper != null)
    {
    singlePlatformAuthWrapper.OptionalParameters.OnQueueUpdatedEvent = OnQueued;
    }

    // スタータースクリプトにキューに入れられたアクションとキャンセルされたアクションをバインド
    if (authEssentialsWrapper_Starter != null)
    {
    authEssentialsWrapper_Starter.OptionalParameters.OnQueueUpdatedEvent = OnQueued;
    }
    if (singlePlatformAuthWrapper_Starter != null)
    {
    singlePlatformAuthWrapper_Starter.OptionalParameters.OnQueueUpdatedEvent = OnQueued;
    }
    }

ログインキャンセルの実装

  1. LoginQueueWrapper_Starter ファイルを開き、後で UI を処理するための新しいデリゲートを宣言します。

    public Action OnLoginCanceled = delegate {};
  2. cancellationTokenSource という名前の変数を宣言します。この変数を使用して、後でログイン試行をキャンセルするために使用されるキャンセルトークンを作成します。

    private CancellationTokenSource cancellationTokenSource;
  3. ResetAndReassignCancellationToken() という関数を作成します。Unity のログインキャンセルは、キャンセルトークンを渡してその Cancel() を呼び出すことで機能します。プレイヤーがログアウトまたはキャンセルして再度ログインしようとしたときの問題を回避するために、ログイン試行ごとにトークンを再作成する必要があります。トークンを再作成しないと、プレイヤーがキャンセル状態でスタックする可能性があります。

    private void ResetAndReassignCancellationToken()
    {
    cancellationTokenSource = new CancellationTokenSource();

    // キャンセルトークンを設定
    if (authEssentialsWrapper != null)
    {
    authEssentialsWrapper.OptionalParameters.CancellationToken = cancellationTokenSource.Token;
    }
    if (singlePlatformAuthWrapper != null)
    {
    singlePlatformAuthWrapper.OptionalParameters.CancellationToken = cancellationTokenSource.Token;
    }

    // スタータースクリプトにキャンセルトークンを設定
    if (authEssentialsWrapper_Starter != null)
    {
    authEssentialsWrapper_Starter.OptionalParameters.CancellationToken = cancellationTokenSource.Token;
    }
    if (singlePlatformAuthWrapper_Starter != null)
    {
    singlePlatformAuthWrapper_Starter.OptionalParameters.CancellationToken = cancellationTokenSource.Token;
    }
    }
  4. ログインキャンセルをトリガーする関数を作成します。

    public void CancelLogin()
    {
    cancellationTokenSource.Cancel();
    }
  5. ログインキャンセルからの応答を処理するコールバック関数を作成します。この関数は結果をログに記録し、デリゲートをトリガーし、将来のログイン試行のためにキャンセルトークンをリセットします。

    private void OnCanceled()
    {
    BytewarsLogger.Log($"Login canceled while in queue.");

    OnLoginCanceled?.Invoke();
    ResetAndReassignCancellationToken();
    }
  6. Start() 関数に移動し、現在の実装を置き換えます。このコードは、認証モジュールのラッパーの OptionalParameters.OnCancelledEvent イベントに OnCanceled() 関数を割り当て、キャンセルトークンを OptionalParameters に設定します。

    private void Start()
    {
    authEssentialsWrapper = TutorialModuleManager.Instance.GetModuleClass<AuthEssentialsWrapper>();
    singlePlatformAuthWrapper = TutorialModuleManager.Instance.GetModuleClass<SinglePlatformAuthWrapper>();
    authEssentialsWrapper_Starter = TutorialModuleManager.Instance.GetModuleClass<AuthEssentialsWrapper_Starter>();
    singlePlatformAuthWrapper_Starter = TutorialModuleManager.Instance.GetModuleClass<SinglePlatformAuthWrapper_Starter>();

    // キューに入れられたアクションとキャンセルされたアクションをバインド
    if (authEssentialsWrapper != null)
    {
    authEssentialsWrapper.OptionalParameters.OnQueueUpdatedEvent = OnQueued;
    authEssentialsWrapper.OptionalParameters.OnCancelledEvent = OnCanceled;
    }
    if (singlePlatformAuthWrapper != null)
    {
    singlePlatformAuthWrapper.OptionalParameters.OnQueueUpdatedEvent = OnQueued;
    singlePlatformAuthWrapper.OptionalParameters.OnCancelledEvent = OnCanceled;
    }

    // スタータースクリプトにキューに入れられたアクションとキャンセルされたアクションをバインド
    if (authEssentialsWrapper_Starter != null)
    {
    authEssentialsWrapper_Starter.OptionalParameters.OnQueueUpdatedEvent = OnQueued;
    authEssentialsWrapper_Starter.OptionalParameters.OnCancelledEvent = OnCanceled;
    }
    if (singlePlatformAuthWrapper_Starter != null)
    {
    singlePlatformAuthWrapper_Starter.OptionalParameters.OnQueueUpdatedEvent = OnQueued;
    singlePlatformAuthWrapper_Starter.OptionalParameters.OnCancelledEvent = OnCanceled;
    }

    ResetAndReassignCancellationToken();
    }

リソース