ロビーを作成する
この記事ではロビーの作成方法について説明します。
ロビーはどのように作成されますか?
ロビーを作成するにはいくつかの方法があります。
- プレイヤーによる: プレイヤーのチームを集めてプレイしたいプレイヤーは、ロビーを作成できます。 これらはクライアント所有のロビーです。
- ゲーム サーバーによる: タイトルのゲーム サーバーはロビーを作成し、プレイヤーの参加を待つことができます。 これらはサーバー所有のロビーです。
- マッチメイキングによって: マッチメイキング後にプレーヤーのグループが形成されると、ゲーム開始前の待機場所としてロビーが作成されます。 これらはクライアント所有のロビーです。
技術的な観点から見ると、すべてのロビーは、所有権に基づいて、サーバー所有とクライアント所有の 2 つの主なカテゴリに分類されます。 詳細については、所有者の要件と権限をご覧ください。
PlayFab Lobby の一般的な使用法は、プレーヤーのグループを一時的に保持することです。 一般的に使用されるロビーのアプリケーションについては、Azure PlayFab ロビーの概要をご覧ください。
サポートされているエンティティ型
ロビーを作成する前に、タイトルは PlayFab エンティティとしてログインする必要があります。
- プレーヤーに代わってクライアント所有のロビーを作成する場合は、title_player_account エンティティとしてログインします。 詳細については、ログインの基本とベスト プラクティスを参照してください。
- ゲーム サーバーに代わってサーバー所有のロビーを作成する場合は、game_server エンティティとしてログインします。 詳細については、AuthenticateGameServerWithCustomId を参照してください。
ロビーの構成方法
ロビーのいくつかの重要な設定は作成時に構成されます: maxMemberCount、accessPolicy、owner、および ownerMigrationPolicy。
- maxMemberCount は、ロビーに収容できるプレーヤーの数を定義します
- accessPolicy は、ロビーの接続文字列を発見できる人を定義します。
- 所有者は、ロビー上のデータを更新する特別な権限を持つロビーの所有者を定義します。 この値は、ロビーを作成しているクライアントまたはサーバー エンティティを暗黙的に表します。
- ownerMigrationPolicy は、現在の所有者がロビーを離れる場合、またはロビーへの接続の維持に問題がある場合に、ロビーの所有権をどのように譲渡するかに関するポリシーを定義します。
さらに、ロビー作成者は作成中に、カスタム ロビー プロパティと検索プロパティを定義して、カスタム データをロビー セッションに追加することもできます。 これらのカスタム プロパティは、ロビーの所有者がロビーの存続期間中に変更することもできます。
詳細については、ロビーのプロパティを参照してください。
ロビーおよびマッチメイキング SDK を使用してクライアント所有のロビーを作成する例
この例では、PlayFab に title_player_account エンティティとしてログインしているローカル プレーヤーを使用します。
このコード スニペットでは、ロビー プロパティは lobbyConfiguration として渡され、ロビーを作成するプレーヤーは、creatorMemberConfiguration を介して初期メンバー プロパティを渡します。 ローカル プレーヤーがロビーの所有者になるため、クライアント所有のロビーになります。 ロビーが正常に作成されたら、PFLobbyHandle を使用して、PFLobbySendInvite で他のプレーヤーを招待できます。
// Retrieved elsewhere from SDK's PFMultiplayerInitialize API
PFMultiplayerHandle apiHandle = g_pfmHandle;
// Retrieved elsewhere from one of PlayFab's title_player_account login APIs
const PFEntityKey* clientOwner = m_localPlayerTitlePlayerAccounts[0];
// Initialize the lobby configuration
const char* gameModePropertyKey = "GameMode";
const char* gameModePropertyValue = "GameMode_Foo";
PFLobbyCreateConfiguration lobbyConfiguration{};
lobbyConfiguration.maxMemberCount = 16;
lobbyConfiguration.ownerMigrationPolicy = PFLobbyOwnerMigrationPolicy::Automatic;
lobbyConfiguration.accessPolicy = PFLobbyAccessPolicy::Private;
lobbyConfiguration.lobbyPropertyCount = 1;
lobbyConfiguration.lobbyPropertyKeys = &gameModePropertyKey;
lobbyConfiguration.lobbyPropertyValues = &gameModePropertyValue;
// Initialize the creator's member properties
const char* playerColorPropertyKey = "PlayerColor";
const char* playerColorPropertyValue = "Red";
PFLobbyJoinConfiguration creatorMemberConfiguration{};
creatorMemberConfiguration.memberPropertyCount = 1;
creatorMemberConfiguration.memberPropertyKeys = &playerColorPropertyKey;
creatorMemberConfiguration.memberPropertyValues = &playerColorPropertyValue;
// Create a lobby using our first player
PFLobbyHandle lobby;
HRESULT error = PFMultiplayerCreateAndJoinLobby(
apiHandle,
clientOwner,
&lobbyConfiguration,
&creatorMemberConfiguration,
nullptr,
&lobby);
ロビーを作成する呼び出しが完了すると、PFLobbyCreateAndJoinLobbyCompletedStateChange が PFMultiplayerStartProcessingLobbyStateChanges によって提供されます。
ロビーおよびマッチメイキング SDK を使用してサーバー所有のロビーを作成する例
この例は、クライアント所有のロビーの例に似ていますが、ロビーを game_server エンティティとして作成し、PFMultiplayerCreateAndJoinLobby の代わりに PFMultiplayerCreateAndClaimServerLobby が呼び出される点が異なります。 。
// Retrieved elsewhere from SDK's PFMultiplayerInitialize API
PFMultiplayerHandle apiHandle = g_pfmHandle;
// Retrieved elsewhere from one of PlayFab's game_server login APIs
const PFEntityKey* serverOwner = m_gameServerEntityKey;
const char* gameModePropertyKey = "GameMode";
const char* gameModePropertyValue = "GameMode_Foo";
// Initialize the lobby configuration
PFLobbyCreateConfiguration lobbyConfiguration{};
lobbyConfiguration.maxMemberCount = 16;
lobbyConfiguration.ownerMigrationPolicy = PFLobbyOwnerMigrationPolicy::Automatic;
lobbyConfiguration.accessPolicy = PFLobbyAccessPolicy::Public;
lobbyConfiguration.lobbyPropertyCount = 1;
lobbyConfiguration.lobbyPropertyKeys = &gameModePropertyKey;
lobbyConfiguration.lobbyPropertyValues = &gameModePropertyValue;
// Create a lobby using our first player
PFLobbyHandle lobby;
HRESULT error = PFMultiplayerCreateAndClaimServerLobby(
apiHandle,
serverOwner,
&lobbyConfiguration,
nullptr,
&lobby);
ロビーを作成する呼び出しが完了すると、PFLobbyCreateAndClaimServerLobbyCompletedStateChange が PFMultiplayerStartProcessingLobbyStateChanges によって提供されます。
クライアント所有のロビーとサーバー所有のロビーの違いの詳細については、ゲーム サーバーとロビーを参照してください。
注意
PlayFab マルチプレイヤーでゲーム サーバー API を有効にするには、PFLobby.h をインクルードする前に PFMULTIPLAYER_INCLUDE_SERVER_APIS を定義する必要があります。 詳細については、ゲーム サーバーとロビーを参照してください。