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

すべてを統合する - デバイス ID でログインする - (Unity モジュール)

Last updated on February 4, 2026

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

UI を接続してプレイヤーがデバイス ID でログインできるようにする

このチュートリアルでは、ログインメニューと前のセクションで作成したログイン実装を接続する方法を学びます。

  1. LoginMenu_Starter クラスを開き、先ほど作成したラッパーを格納する変数を定義します。

    private AuthEssentialsWrapper_Starter authWrapper;
  2. Start() 関数でラッパーを初期化し、ボタンのバインディングと一緒に設定します。

    private void Start()
    {
    ...
    authWrapper = TutorialModuleManager.Instance.GetModuleClass<AuthEssentialsWrapper_Starter>();
    loginWithDeviceIdButton.onClick.AddListener(OnLoginWithDeviceIdButtonClicked);
    quitGameButton.onClick.AddListener(OnQuitGameButtonClicked);
    }
  3. OnLoginWithDeviceIdButtonClicked() 関数を更新して、ラッパーを使用してログインリクエストを送信します。

    private void OnLoginWithDeviceIdButtonClicked()
    {
    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Loading);
    OnRetryLoginClicked = OnLoginWithDeviceIdButtonClicked;
    authWrapper.LoginWithDeviceId(OnLoginCompleted);
    }
  4. UI のログイン結果を処理するコールバック関数を作成します。

    public void OnLoginCompleted(Result<TokenData, OAuthError> result)
    {
    if (!result.IsError)
    {
    MenuManager.Instance.ChangeToMenu(AssetEnum.MainMenuCanvas);
    BytewarsLogger.Log($"Login successful: {result.Value.ToJsonString()}");
    }
    else
    {
    widgetSwitcher.ErrorMessage = $"Login failed: {result.Error.error}";
    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Error);
    StartCoroutine(SetSelectedGameObject(retryLoginButton.gameObject));
    }
    }
  5. 次に AuthEssentialsWrapper_Starter クラスを開き、ロビーの切断を処理する新しいコールバック関数を追加します。切断が複数セッションまたは意図的なログアウトによるものである場合、ゲームはユーザーをログアウトさせる必要があります。

    private void OnLobbyDisconnected(WsCloseCode code)
    {
    BytewarsLogger.Log($"Lobby service disconnected with code: {code}");

    /* If disconnected from lobby intentionally or due to account issue,
    * log out and return to the login menu. */
    HashSet<WsCloseCode> disconnectCode = new HashSet<WsCloseCode>()
    {
    WsCloseCode.Normal,
    WsCloseCode.DisconnectDueToMultipleSessions,
    WsCloseCode.DisconnectDueToIAMLoggedOut
    };

    if (disconnectCode.Contains(code))
    {
    lobby.Disconnected -= OnLobbyDisconnected;
    Logout(() => { MenuManager.Instance.ChangeToMenu(AssetEnum.LoginMenu); });
    }
    }
  6. 同じファイル内で、Awake() 関数に以下のコードを追加して、ロビーの切断と終了アクションをリッスンします。

    private void Awake()
    {
    ...
    lobby.Disconnected += OnLobbyDisconnected;
    MainMenu.OnQuitPressed += Logout;
    }

リソース