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

すべてを統合する - セッション入門 - (Unreal Engine モジュール)

Last updated on February 4, 2026

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

セッションの作成、退出、現在のステータス表示のためのUIの接続

  1. まず、CreateSessionWidget_Starter クラスのヘッダーファイルを開きます。SessionTemplateName_Dummy という変数を見つけて、ゲームセッションのセットアップで設定したセッションテンプレート名を入力します。

    protected:
    // ...
    const FString SessionTemplateName_Dummy = "unreal-elimination-none";
  2. セッション作成メニューの追加で設定した関数定義を変更する必要があります。CreateSessionWidget_Starter クラスのCPPファイルを開き、CreateSession に移動します。既存のコードを以下のコードに置き換えます。

    void UCreateSessionWidget_Starter::CreateSession()
    {
    if (!SessionOnlineSession)
    {
    return;
    }

    // An event to validate to start the session will be used in the Play with Party module.
    if (SessionOnlineSession->ValidateToStartSession.IsBound() &&
    !SessionOnlineSession->ValidateToStartSession.Execute())
    {
    return;
    }

    Ws_Processing->LoadingMessage = TEXT_REQUESTING_SESSION_CREATION;
    SwitchContent(EContentType::LOADING);

    // Create dummy session. Override dummy session template name if applicable.
    SessionOnlineSession->CreateSession(
    SessionOnlineSession->GetLocalUserNumFromPlayerController(GetOwningPlayer()),
    SessionOnlineSession->GetPredefinedSessionNameFromType(EAccelByteV2SessionType::GameSession),
    FOnlineSessionSettings(),
    EAccelByteV2SessionType::GameSession,
    UTutorialModuleOnlineUtility::GetDummySessionTemplateOverride().IsEmpty() ?
    SessionTemplateName_Dummy : UTutorialModuleOnlineUtility::GetDummySessionTemplateOverride());
    }
  3. 引き続きCPPファイルで、LeaveSession に移動し、既存のコードを以下のコードに置き換えます。

    void UCreateSessionWidget_Starter::LeaveSession()
    {
    if (!SessionOnlineSession)
    {
    return;
    }

    Ws_Processing->LoadingMessage = TEXT_LEAVING_SESSION;
    SwitchContent(EContentType::LOADING);

    SessionOnlineSession->LeaveSession(
    SessionOnlineSession->GetPredefinedSessionNameFromType(EAccelByteV2SessionType::GameSession));
    }
  4. このUIクラスのレスポンス関数をOnline Sessionのレスポンスデリゲートにバインドします。NativeOnActivated に移動し、以下のコードに置き換えます。このコードでは、プレイヤーがすでにゲームセッションに参加している場合、ウィジェットの成功状態を即座に表示します。

    void UCreateSessionWidget_Starter::NativeOnActivated()
    {
    Super::NativeOnActivated();

    #pragma region "UI related"
    Btn_Back->OnClicked().AddUObject(this, &ThisClass::DeactivateWidget);
    Btn_CreateSession->OnClicked().AddUObject(this, &ThisClass::CreateSession);
    Btn_Leave->OnClicked().AddUObject(this, &ThisClass::LeaveSession);
    Ws_Processing->OnRetryClicked.AddUObject(this, &ThisClass::CreateSession);
    #pragma endregion

    SessionOnlineSession = Cast<UAccelByteWarsOnlineSessionBase>(GetGameInstance()->GetOnlineSession());
    if (!ensure(SessionOnlineSession))
    {
    return;
    }

    SessionOnlineSession->GetOnCreateSessionCompleteDelegates()->AddUObject(this, &ThisClass::OnCreateSessionComplete);
    SessionOnlineSession->GetOnLeaveSessionCompleteDelegates()->AddUObject(this, &ThisClass::OnLeaveSessionComplete);

    // Set initial UI state.
    SwitchContent(EContentType::CREATE);
    Ws_Processing->ForceRefresh();

    // Set UI state to success if already in a session.
    const FName SessionName = SessionOnlineSession->GetPredefinedSessionNameFromType(EAccelByteV2SessionType::GameSession);
    const FNamedOnlineSession* OnlineSession = SessionOnlineSession->GetSession(SessionName);
    if (OnlineSession)
    {
    OnCreateSessionComplete(SessionName, true);
    }
    }
  5. ユーザーがメニューにいないときにこのメニューのレスポンス関数がトリガーされないようにするため、UIが閉じるときにレスポンスデリゲートからレスポンス関数をアンバインドします。引き続きCPPファイルで、NativeOnDeactivated に移動し、以下のコードに置き換えます。

    void UCreateSessionWidget_Starter::NativeOnDeactivated()
    {
    Super::NativeOnDeactivated();

    #pragma region "UI related"
    Btn_Back->OnClicked().RemoveAll(this);
    Btn_CreateSession->OnClicked().RemoveAll(this);
    Btn_Leave->OnClicked().RemoveAll(this);
    Ws_Processing->OnRetryClicked.RemoveAll(this);
    #pragma endregion

    if (SessionOnlineSession)
    {
    SessionOnlineSession->GetOnCreateSessionCompleteDelegates()->RemoveAll(this);
    SessionOnlineSession->GetOnLeaveSessionCompleteDelegates()->RemoveAll(this);
    }
    }

リソース