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

すべてを統合する - 専用サーバーで参加可能なセッション - (Unreal Engine モジュール)

Last updated on February 4, 2026

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

Create Match Session メニューをセッションの作成、退出、現在のセッションステータス表示に接続する

  1. CreateMatchSessionDSWidget_Starter CPP ファイルを開き、CreateSession() 関数に移動します。Online Session からセッション作成関数の呼び出しを追加します。親ウィジェットがプレイヤーが選択したゲームモードを保存していることに注意してください。次に、選択されたゲームモードを取得して Online Session に渡します。

    void UCreateMatchSessionDSWidget_Starter::CreateSession() const
    {
    if (OnlineSession->ValidateToStartSession.IsBound() &&
    !OnlineSession->ValidateToStartSession.Execute())
    {
    return;
    }

    // Make sure the retry and cancel game session is performed by this class when the DS network type is selected.
    W_Parent->GetProcessingWidgetComponent()->OnCancelClicked.Clear();
    W_Parent->GetProcessingWidgetComponent()->OnRetryClicked.Clear();
    W_Parent->GetProcessingWidgetComponent()->OnCancelClicked.AddUObject(this, &ThisClass::CancelJoiningSession);
    W_Parent->GetProcessingWidgetComponent()->OnRetryClicked.AddUObject(this, &ThisClass::CreateSession);

    W_Parent->SetLoadingMessage(TEXT_REQUESTING_SESSION_CREATION, false);
    W_Parent->SwitchContent(UCreateMatchSessionWidget::EContentType::LOADING);

    OnlineSession->CreateMatchSession(
    OnlineSession->GetLocalUserNumFromPlayerController(GetOwningPlayer()),
    EGameModeNetworkType::DS,
    W_Parent->GetSelectedGameModeType(), W_Parent->GetSelectedGameStyle());
    }
  2. CancelJoiningSession() 関数に移動します。LeaveSession を呼び出して参加キャンセル効果を実現します。技術的には、この関数が呼び出されたとき、プレイヤーはすでにセッション内にいますが、この場合は専用サーバーの準備が整うのを待っている状態です。

    void UCreateMatchSessionDSWidget_Starter::CancelJoiningSession() const
    {
    W_Parent->SetLoadingMessage(TEXT_LEAVING_SESSION, false);
    W_Parent->SwitchContent(UCreateMatchSessionWidget::EContentType::LOADING);

    OnlineSession->LeaveSession(
    OnlineSession->GetPredefinedSessionNameFromType(EAccelByteV2SessionType::GameSession));
    }
  3. 前のモジュールで、いくつかのコールバック関数を準備しました。これらの関数を動作させるには、デリゲートにバインドする必要があります。CPP ファイルで NativeOnActivated に移動し、以下のコードに置き換えます。

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

    // Get online session
    UOnlineSession* BaseOnlineSession = GetWorld()->GetGameInstance()->GetOnlineSession();
    if (!ensure(BaseOnlineSession))
    {
    return;
    }
    OnlineSession = Cast<UAccelByteWarsOnlineSessionBase>(BaseOnlineSession);

    // Get parent menu widget
    W_Parent = GetFirstOccurenceOuter<UCreateMatchSessionWidget>();
    if (!ensure(W_Parent))
    {
    return;
    }

    OnlineSession->GetOnCreateSessionCompleteDelegates()->AddUObject(this, &ThisClass::OnCreateSessionComplete);
    OnlineSession->GetOnLeaveSessionCompleteDelegates()->AddUObject(this, &ThisClass::OnCancelJoiningSessionComplete);
    OnlineSession->GetOnSessionServerUpdateReceivedDelegates()->AddUObject(
    this, &ThisClass::OnSessionServerUpdateReceived);

    Btn_StartMatchSessionDS->OnClicked().AddUObject(this, &ThisClass::CreateSession);
    }
  4. 不要になったらバインドを解除します。NativeOnDeactivated に移動し、以下のコードに置き換えます。

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

    OnlineSession->GetOnCreateSessionCompleteDelegates()->RemoveAll(this);
    OnlineSession->GetOnLeaveSessionCompleteDelegates()->RemoveAll(this);
    OnlineSession->GetOnSessionServerUpdateReceivedDelegates()->RemoveAll(this);

    Btn_StartMatchSessionDS->OnClicked().RemoveAll(this);
    W_Parent->GetProcessingWidgetComponent()->OnRetryClicked.RemoveAll(this);
    W_Parent->GetProcessingWidgetComponent()->OnCancelClicked.RemoveAll(this);
    }

Browse Match メニューを利用可能なセッションの検索と参加、現在のセッションステータス表示に接続する

  1. BrowseMatchDSWidget_Starter CPP ファイルを開き、FindSessions() 関数に移動します。Online Session から FindSessions() 関数を呼び出します。バックエンドが返すセッションの最大数を増やしたい場合は、Header ファイルの SessionsNumToQuery 値を増やすだけです。

    void UBrowseMatchDSWidget_Starter::FindSessions(const bool bForce) const
    {
    W_Parent->SetLoadingMessage(TEXT_LOADING_DATA, true, false);
    W_Parent->SwitchContent(UBrowseMatchWidget::EContentType::BROWSE_LOADING);
    Btn_Refresh->SetIsEnabled(false);

    OnlineSession->FindSessions(
    OnlineSession->GetLocalUserNumFromPlayerController(GetOwningPlayer()),
    SessionsNumToQuery,
    bForce);
    }
  2. CancelJoining() 関数に移動し、以下のコードに置き換えます。Create Match メニューと同様に、この関数は LeaveSession を呼び出します。

    void UBrowseMatchDSWidget_Starter::CancelJoining() const
    {
    W_Parent->SetLoadingMessage(TEXT_LEAVING_SESSION, false, false);
    W_Parent->SwitchContent(UBrowseMatchWidget::EContentType::JOIN_LOADING);

    OnlineSession->LeaveSession(
    OnlineSession->GetPredefinedSessionNameFromType(EAccelByteV2SessionType::GameSession));
    }
  3. JoinSession() 関数に移動します。対応する Online Session 関数を呼び出すために、以下のコードに置き換えます。

    void UBrowseMatchDSWidget_Starter::JoinSession(const FOnlineSessionSearchResult& SessionSearchResult) const
    {
    if (OnlineSession->ValidateToJoinSession.IsBound() &&
    !OnlineSession->ValidateToJoinSession.Execute(SessionSearchResult))
    {
    return;
    }

    W_Parent->SetLoadingMessage(TEXT_JOINING_SESSION, false, false);
    W_Parent->SwitchContent(UBrowseMatchWidget::EContentType::JOIN_LOADING);

    OnlineSession->JoinSession(
    OnlineSession->GetLocalUserNumFromPlayerController(GetOwningPlayer()),
    OnlineSession->GetPredefinedSessionNameFromType(EAccelByteV2SessionType::GameSession),
    SessionSearchResult);
    }
  4. コールバック関数をコールバックデリゲートにバインドします。CPP ファイルで NativeOnActivated に移動し、以下のコードに置き換えます。

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

    // Get online session
    UOnlineSession* BaseOnlineSession = GetWorld()->GetGameInstance()->GetOnlineSession();
    if (!ensure(BaseOnlineSession))
    {
    return;
    }
    OnlineSession = Cast<UAccelByteWarsOnlineSessionBase>(BaseOnlineSession);
    ensure(OnlineSession);

    // Get parent menu widget
    W_Parent = GetFirstOccurenceOuter<UBrowseMatchWidget>();
    if (!ensure(W_Parent))
    {
    return;
    }

    OnlineSession->GetOnLeaveSessionCompleteDelegates()->AddUObject(this, &ThisClass::OnCancelJoiningComplete);
    OnlineSession->GetOnFindSessionsCompleteDelegates()->AddUObject(this, &ThisClass::OnFindSessionComplete);
    OnlineSession->GetOnJoinSessionCompleteDelegates()->AddUObject(this, &ThisClass::OnJoinSessionComplete);
    OnlineSession->GetOnSessionServerUpdateReceivedDelegates()->AddUObject(this, &ThisClass::OnSessionServerUpdateReceived);

    Btn_Refresh->OnClicked().AddUObject(this, &ThisClass::FindSessions, true);
    W_Parent->GetJoiningWidgetComponent()->OnCancelClicked.AddUObject(this, &ThisClass::CancelJoining);

    FindSessions(false);
    }
  5. これらのコールバックを適切にバインド解除する方法を実装します。NativeOnDeactivated に移動し、以下のコードに置き換えます。

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

    OnlineSession->GetOnLeaveSessionCompleteDelegates()->RemoveAll(this);
    OnlineSession->GetOnFindSessionsCompleteDelegates()->RemoveAll(this);
    OnlineSession->GetOnJoinSessionCompleteDelegates()->RemoveAll(this);
    OnlineSession->GetOnSessionServerUpdateReceivedDelegates()->RemoveAll(this);

    Btn_Refresh->OnClicked().RemoveAll(this);
    W_Parent->GetJoiningWidgetComponent()->OnCancelClicked.RemoveAll(this);
    }
  6. プロジェクトをコンパイルし、エラーがないことを確認します。

専用サーバーをアップロードする

このチュートリアルを完了してプレイテストするには、新しい専用サーバーイメージを Admin Portal にアップロードする必要があります。これを行うには、AccelByte Multiplayer Servers (AMS) を使用した専用サーバーモジュールを参照してください。

リソース