すべてを統合する - セッション入門 - (Unreal Engine モジュール)
Last updated on February 4, 2026
注釈:本資料はAI技術を用いて翻訳されています。
セッションの作成、退出、現在のステータス表示のためのUIの接続
-
まず、
CreateSessionWidget_Starterクラスのヘッダーファイルを開きます。SessionTemplateName_Dummyという変数を見つけて、ゲームセッションのセットアップで設定したセッションテンプレート名を入力します。protected:
// ...
const FString SessionTemplateName_Dummy = "unreal-elimination-none"; -
セッション作成メニューの追加で設定した関数定義を変更する必要があります。
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());
} -
引き続きCPPファイルで、
LeaveSessionに移動し、既存のコードを以下のコードに置き換えます。void UCreateSessionWidget_Starter::LeaveSession()
{
if (!SessionOnlineSession)
{
return;
}
Ws_Processing->LoadingMessage = TEXT_LEAVING_SESSION;
SwitchContent(EContentType::LOADING);
SessionOnlineSession->LeaveSession(
SessionOnlineSession->GetPredefinedSessionNameFromType(EAccelByteV2SessionType::GameSession));
} -
この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);
}
} -
ユーザーがメニューにいないときにこのメニューのレスポンス関数がトリガーされないようにするため、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);
}
}
リソース
- このチュートリアルセクションで使用されているファイルは、Byte Wars Unreal GitHubリポジトリで入手できます。