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

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

Last updated on May 30, 2024

Connect the UI to create, leave, and display current session status

  1. Start by opening the CreateSessionWidget_Starter class Header file. Find the variable called SessionTemplateName_Dummy and fill it with the session template name you set up in Set up game sessions.

    protected:
    const FString SessionTemplateName_Dummy = "unreal-elimination-none";
  2. You need to modify the function definition that you set up in Add session creation menu. Open CreateSessionWidget_Starter class CPP file and navigate to CreateSession. Add the highlighted lines in the following code:

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

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

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

    SessionOnlineSession->CreateSession(
    SessionOnlineSession->GetLocalUserNumFromPlayerController(GetOwningPlayer()),
    SessionOnlineSession->GetPredefinedSessionNameFromType(EAccelByteV2SessionType::GameSession),
    FOnlineSessionSettings(),
    EAccelByteV2SessionType::GameSession,
    SessionTemplateName_Dummy);
    }
  3. Still in the CPP file, navigate to LeaveSession and add the highlighted lines in the following code:

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

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

    SessionOnlineSession->LeaveSession(
    SessionOnlineSession->GetPredefinedSessionNameFromType(EAccelByteV2SessionType::GameSession));
    }
  4. Bind the response function in this UI class to the Online Session response delegate. Navigate to NativeOnActivated and add the highlighted lines in the following code:

    void UCreateSessionWidget_Starter::NativeOnActivated()
    {
    ...
    if (!ensure(SessionOnlineSession))
    {
    return;
    }

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

    ...
    }
  5. To make sure that the response functions in this menu won't trigger when the user is not in the menu, unbind the response functions from the response delegate when the UI closes. Still in the CPP file, navigate to NativeOnDeactivated and add the highlighted lines in the following code:

    void UCreateSessionWidget_Starter::NativeOnDeactivated()
    {
    ...

    if (SessionOnlineSession)
    {
    SessionOnlineSession->GetOnCreateSessionCompleteDelegates()->RemoveAll(this);
    SessionOnlineSession->GetOnLeaveSessionCompleteDelegates()->RemoveAll(this);
    }
    }
  6. Since you want the widget to be in the Success state if the player opens the widget while they are already a part of a session, navigate to NativeOnActivated and add the highlighted line in the following code:

    void UCreateSessionWidget_Starter::NativeOnActivated()
    {
    ...
    const FName SessionName = SessionOnlineSession->GetPredefinedSessionNameFromType(EAccelByteV2SessionType::GameSession);
    const FNamedOnlineSession* OnlineSession = SessionOnlineSession->GetSession(SessionName);
    if (OnlineSession)
    {
    OnCreateSessionComplete(SessionName, true);
    }
    }

Compile your project again and make sure there are no errors.

Resources