ゲームセッションへの招待 UI - フレンドとプレイする - (Unreal Engine モジュール)
注釈:本資料はAI技術を用いて翻訳されています。
ゲームセッションへの招待 UI について
ゲームセッションへの招待 UI は、Byte Wars のウィジェットで、フレンドリストモジュールのフレンド詳細ウィジェットに付属しています。リソースセクションで利用可能で、ボタンで構成されており、以下のクラスで定義されています:
InviteToGameSessionWidget_Starter:実装の大部分が含まれる C++ クラスです。- ヘッダーファイル:
\Source\AccelByteWars\TutorialModules\Play\PlayingWithFriends\UI\InviteToGameSessionWidget_Starter.h - CPP ファイル:
\Source\AccelByteWars\TutorialModules\PlayingWithFriends\UI\InviteToGameSessionWidget_Starter.cpp
- ヘッダーファイル:
W_InviteToGameSession_Starter:Unreal Motion Graphics(UMG)を使用して作成および設計されたウィジェット Blueprint クラスです。
これらのファイルで準備されている内容を見てみましょう:
-
メニューは
Btn_Inviteという単一のボタンで構成されています。これはプレイヤーが招待機能をトリガーする場所です。private:
// ...
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional, BlueprintProtected = true, AllowPrivateAccess = true))
UCommonButtonBase* Btn_Invite; -
メニューはフレンド詳細ウィジェットに付属しているため、そこからキャッシュされたフレンドデータにアクセスする方法が必要です。そこで
GetFriendDataFromParentWidgetが登場します。この関数を呼び出すだけで、フレンド詳細ウィジェットからキャッシュされたフレンドデータが返されます。private:
// ...
UFriendData* GetFriendDataFromParentWidget(); -
ヘッダーファイルの
FTimerHandle変数に注目してください。これは、プレイヤーが招待ボタンを連打するのを防ぐための無効化タイマーとして使用されます。private:
// ...
FTimerHandle InviteDelayTimerHandle; -
サブシステム変数もあります。これは、後で実装するサブシステムクラスへのポインタです。そのポインタを取得するコードは、
NativeOnActivatedの下のInviteToGameSessionWidget_Starterにあります。private:
// ...
UPROPERTY()
UPlayingWithFriendsSubsystem_Starter* Subsystem;void UInviteToGameSessionWidget_Starter::NativeOnActivated()
{
// ...
Subsystem = GetGameInstance()->GetSubsystem<UPlayingWithFriendsSubsystem_Starter>();
check(Subsystem)
// ...
}
ゲームセッションへの招待ウィジェットを準備する
このウィジェットは招待の送信のみを担当し、それ以外は何もしないことを覚えておいてください。招待通知は、後で別の UI システムによって処理されます。
-
InviteToGameSessionWidget_Starterヘッダーファイルを開き、以下の宣言を追加します:private:
// ...
void InviteToSession(); -
InviteToGameSessionWidget_StarterCPP ファイルを開き、この実装を追加します:void UInviteToGameSessionWidget_Starter::InviteToSession()
{
const UFriendData* FriendData = GetFriendDataFromParentWidget();
if (!FriendData)
{
return;
}
// disable button for 5 seconds to avoid spamming
Btn_Invite->SetIsEnabled(false);
GetGameInstance()->GetTimerManager().SetTimer(
InviteDelayTimerHandle,
FTimerDelegate::CreateWeakLambda(this, [this]()
{
Btn_Invite->SetIsEnabled(true);
}),
5.0f,
false,
5.0f);
// ...
} -
引き続き CPP ファイルで、
NativeOnActivated()関数に移動し、以下のコードを追加します:void UInviteToGameSessionWidget_Starter::NativeOnActivated()
{
// ...
Btn_Invite->SetIsEnabled(true);
Btn_Invite->OnClicked().AddUObject(this, &ThisClass::InviteToSession);
} -
ウィジェットが閉じるときに関数をアンバインドします。CPP ファイルで、
NativeOnDeactivatedに移動し、以下のコードを追加します:void UInviteToGameSessionWidget_Starter::NativeOnDeactivated()
{
Btn_Invite->OnClicked().RemoveAll(this);
if (InviteDelayTimerHandle.IsValid())
{
GetGameInstance()->GetTimerManager().ClearTimer(InviteDelayTimerHandle);
}
Super::NativeOnDeactivated();
} -
プロジェクトをビルドし、Unreal Editor で開きます。
-
Unreal Editor で、コンテンツブラウザから
Content\TutorialModules\Play\PlayingWithFriends\UI\に移動し、W_InviteToGameSession_Starterを開きます。Bind Widgets タブですべてのウィジェットが適切にバインドされており、Parent class がInviteToGameSessionWidget_Starterに設定されていることを確認してください。
-
Content\TutorialModules\Play\PlayingWithFriends\DA_PlayingWithFriends.uassetを開き、Is Starter Mode Activeを有効にします。データアセットを保存します。
-
エディタでゲームをプレイし、Online Play > Play Online > Create Match Session > Invite Friends に移動します。任意のフレンドをクリックしてから Invite to Match Session をクリックします。正しく実装されていれば、スターター UI が表示されます。
リソース
- このチュートリアルセクションで使用されるファイルは、Byte Wars GitHub リポジトリで入手できます。
- AccelByteWars/Content/TutorialModules/Play/PlayingWithFriends/UI/W_InviteToGameSession_Starter.uasset
- AccelByteWars/Source/AccelByteWars/TutorialModules/Play/PlayingWithFriends/UI/InviteToGameSessionWidget_Starter.h
- AccelByteWars/Source/AccelByteWars/TutorialModules/Play/PlayingWithFriends/UI/InviteToGameSessionWidget_Starter.cpp
- AccelByteWars/Content/TutorialModules/Play/PlayingWithFriends/UI/DA_PlayingWithFriends.uasset