すべてを統合する - セッション入門 - (Unreal Engine モジュール)
Connect the UI to create, leave, and display current session status
Start by opening the
CreateSessionWidget_Starter
class Header file. Find the variable calledSessionTemplateName_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";You need to modify the function definition that you set up in Add session creation menu. Open
CreateSessionWidget_Starter
class CPP file and navigate toCreateSession
. 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);
}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));
}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);
...
}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);
}
}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
- The files used in this tutorial section are available in the Byte Wars Unreal GitHub repository.