次の方法で共有


ロビーを作成する

この記事ではロビーの作成方法について説明します。

ロビーはどのように作成されますか?

ロビーを作成するにはいくつかの方法があります。

  • プレイヤーによる: プレイヤーのチームを集めてプレイしたいプレイヤーは、ロビーを作成できます。 これらはクライアント所有のロビーです。
  • ゲーム サーバーによる: タイトルのゲーム サーバーはロビーを作成し、プレイヤーの参加を待つことができます。 これらはサーバー所有のロビーです。
  • マッチメイキングによって: マッチメイキング後にプレーヤーのグループが形成されると、ゲーム開始前の待機場所としてロビーが作成されます。 これらはクライアント所有のロビーです。

技術的な観点から見ると、すべてのロビーは、所有権に基づいて、サーバー所有とクライアント所有の 2 つの主なカテゴリに分類されます。 詳細については、所有者の要件と権限をご覧ください。

PlayFab Lobby の一般的な使用法は、プレーヤーのグループを一時的に保持することです。 一般的に使用されるロビーのアプリケーションについては、Azure PlayFab ロビーの概要をご覧ください。

サポートされているエンティティ型

ロビーを作成する前に、タイトルは PlayFab エンティティとしてログインする必要があります。

  • プレーヤーに代わってクライアント所有のロビーを作成する場合は、title_player_account エンティティとしてログインします。 詳細については、ログインの基本とベスト プラクティスを参照してください。
  • ゲーム サーバーに代わってサーバー所有のロビーを作成する場合は、game_server エンティティとしてログインします。 詳細については、AuthenticateGameServerWithCustomId を参照してください。

ロビーの構成方法

ロビーのいくつかの重要な設定は作成時に構成されます: maxMemberCountaccessPolicyowner、および 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);

ロビーを作成する呼び出しが完了すると、PFLobbyCreateAndJoinLobbyCompletedStateChangePFMultiplayerStartProcessingLobbyStateChanges によって提供されます。

ロビーおよびマッチメイキング 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);

ロビーを作成する呼び出しが完了すると、PFLobbyCreateAndClaimServerLobbyCompletedStateChangePFMultiplayerStartProcessingLobbyStateChanges によって提供されます。

クライアント所有のロビーとサーバー所有のロビーの違いの詳細については、ゲーム サーバーとロビーを参照してください。

注意

PlayFab マルチプレイヤーでゲーム サーバー API を有効にするには、PFLobby.h をインクルードする前に PFMULTIPLAYER_INCLUDE_SERVER_APIS を定義する必要があります。 詳細については、ゲーム サーバーとロビーを参照してください。

関連項目