> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# クイックスタート (Windows) - Party とマルチプレイヤー

> PlayFab Unified SDK を使用して、PlayFab Party の音声、チャット、ネットワーキングと、PlayFab Multiplayer のロビーおよびマッチメイキングを Windows で統合します。

このガイドでは、統合 SDK を使用して、音声、チャット、およびデータネットワーキング向けの PlayFab Party と、ロビーおよびマッチメイキングサービス向けの PlayFab Multiplayer を統合する方法を説明します。

## 前提条件

開始する前に、以下を確認してください:

* [コア SDK のセットアップと認証](/services/playfab/sdks/unified-sdk/quickstart-core)を完了済みであること
* ログインプロセスから取得した認証済みの `PFEntityHandle`
* Game Manager で構成された PlayFab タイトル ID
* 非同期プログラミングパターンの基本的な理解

<Note>
  このガイドでは、[コアクイックスタートガイド](/services/playfab/sdks/unified-sdk/quickstart-core)に従って、既に PlayFab SDK を初期化し、プレイヤーを認証していることを前提としています。まだの場合は、まずそのガイドを完了してください。
</Note>

## 達成すること

このクイックスタートの終わりまでに、以下を達成します:

* ネットワーキングとチャット用に PlayFab Party を初期化する
* ローカルユーザーとチャットコントロールを作成する
* 通信用の Party ネットワークをセットアップする
* PlayFab Multiplayer を初期化してロビーを作成する
* Party と Multiplayer リソースのクリーンアップ手順を理解する

## ヘッダーとインクルード

### 必須ヘッダー

PlayFab Party および Multiplayer 機能にアクセスするために、ヘッダーファイルに SDK ヘッダーをインクルードします:

```cpp theme={null}
#include <Party.h>
#include <Party_c.h>

#include <PFMultiplayer.h>
#include <PFLobby.h>

#include <playfab/services/PFServices.h>
```

### 実装ファイル

実装ファイルに **PartyImpl.h** をインクルードし、Party 名前空間を使用します:

```cpp theme={null}
#include <PartyImpl.h>

using namespace Party;
```

## ステップ 1: PlayFab Party を初期化する

`PartyManager` のシングルトンリファレンスを作成し、タイトル ID と、高度なスレッド制御のためのオプションのタスクキューで構成することで、PlayFab Party を初期化します。

```cpp theme={null}
PartyManager& partyManager = PartyManager::GetSingleton();
PartyInitializationConfiguration partyInitConfig = {};
PartyError err;

partyInitConfig.titleId = (PartyString) m_titleId; // Your PlayFab Title ID
partyInitConfig.audioTaskQueue = nullptr; // Optional: Custom XTaskQueue for audio operations, or nullptr for default
partyInitConfig.networkingTaskQueue = nullptr; // Optional: Custom XTaskQueue for networking operations, or nullptr for default

err = partyManager.Initialize(&partyInitConfig);
if (PARTY_FAILED(err))
{
    std::wcerr << L"Failed to initialize PartyManager: 0x" << std::hex << err << std::endl;
    return err;
}

std::wcout << L"PartyManager initialized successfully" << std::endl;
```

<Tip>
  `audioTaskQueue` および `networkingTaskQueue` パラメーターを使用すると、スレッド処理をきめ細かく制御するためのカスタム XTaskQueue インスタンスを指定できます。デフォルトのスレッド動作を使用するには、これらを `nullptr` に設定します。
</Tip>

## ステップ 2: ローカルユーザーを作成する

このデバイス上で認証されたプレイヤーを表すローカルユーザーオブジェクトを作成します。このユーザーは、すべてのネットワーキングおよびチャット操作に必要です。

```cpp theme={null}
PartyLocalUser* localUser{};
PartyError userErr;

// Use the entityHandle obtained from authentication
userErr = partyManager.CreateLocalUser(entityHandle, &localUser);
if (PARTY_FAILED(userErr))
{
    std::wcerr << L"Failed to create local user: 0x" << std::hex << userErr << std::endl;
    return userErr;
}

std::wcout << L"Local user created successfully" << std::endl;
```

## ステップ 3: チャットコントロールを作成する

このデバイス上のユーザーの音声およびテキストチャット操作を管理するためのチャットコントロールを作成します。

```cpp theme={null}
PartyLocalDevice* localDevice;
PartyError deviceErr = partyManager.GetLocalDevice(&localDevice);
if (PARTY_FAILED(deviceErr))
{
    std::wcerr << L"Failed to get local device: 0x" << std::hex << deviceErr << std::endl;
    return deviceErr;
}

PartyLocalChatControl* chatControl;
PartyError chatErr = localDevice->CreateChatControl(localUser, nullptr, nullptr, &chatControl);
if (PARTY_FAILED(chatErr))
{
    std::wcerr << L"Failed to create chat control: 0x" << std::hex << chatErr << std::endl;
    return chatErr;
}

std::wcout << L"Chat control created successfully" << std::endl;
```

チャットコントロールは、オーディオ入出力を処理し、音声通信機能を有効にします。

## ステップ 4: Party ネットワークを作成する

Party ネットワーク (チャットとデータを交換できるデバイスとユーザーの安全なコレクション) を作成します。Party ネットワークは通常、ゲームのマルチプレイヤーセッションまたはロビーの概念に対応します。

```cpp theme={null}
PartyNetworkDescriptor networkDescriptor = {};
PartyNetworkConfiguration networkConfiguration = {};

// Configure network limits
networkConfiguration.directPeerConnectivityOptions = PartyDirectPeerConnectivityOptions::None;
networkConfiguration.maxDeviceCount = 8;
networkConfiguration.maxDevicesPerUserCount = 1;
networkConfiguration.maxEndpointsPerDeviceCount = 1;
networkConfiguration.maxUserCount = 8;
networkConfiguration.maxUsersPerDeviceCount = 1;

// Configure invitation settings
PartyInvitationConfiguration invitationConfiguration = {
    "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", // Unique network identifier (generate a GUID)
    PartyInvitationRevocability::Anyone,
    0,
    nullptr
};

PartyError networkErr = partyManager.CreateNewNetwork(
    localUser,
    &networkConfiguration,
    0,
    nullptr,
    &invitationConfiguration,
    nullptr,
    &networkDescriptor,
    nullptr);

if (PARTY_FAILED(networkErr))
{
    std::wcerr << L"Failed to create Party network: 0x" << std::hex << networkErr << std::endl;
    return networkErr;
}

std::wcout << L"Party network created successfully" << std::endl;
```

<Info>
  `PartyInvitationConfiguration` に、有効で一意のネットワーク識別子 (GUID) を必ず指定してください。この ID は、他のプレイヤーがあなたのネットワークに参加するために使用します。
</Info>

🎉 **おめでとうございます!** PlayFab Party のネットワーキングとチャットのセットアップに成功しました。

## ステップ 5: PlayFab Multiplayer を初期化する

ロビーとマッチメイキング機能を有効にするために、PlayFab Multiplayer サービスを初期化します。

```cpp theme={null}
PFMultiplayerHandle pfmHandle{};
MultiplayerInitializationConfiguration multiplayerInitConfig{};

multiplayerInitConfig.titleId = m_titleId; // Your PlayFab Title ID

HRESULT hr = PFMultiplayerInitialize(&multiplayerInitConfig, &pfmHandle);
if (FAILED(hr))
{
    std::wcerr << L"Failed to initialize Multiplayer: 0x" << std::hex << hr << std::endl;
    return hr;
}

std::wcout << L"PlayFab Multiplayer initialized successfully" << std::endl;
```

## ステップ 6: ロビーを作成する

マッチ開始前にプレイヤーグループを管理するためのロビーを作成します。ロビーはオーナー移行やアクセス制御などの機能をサポートします。

```cpp theme={null}
PFLobbyCreateConfiguration lobbyConfiguration{};
lobbyConfiguration.maxMemberCount = 8;
lobbyConfiguration.ownerMigrationPolicy = PFLobbyOwnerMigrationPolicy::Automatic;
lobbyConfiguration.accessPolicy = PFLobbyAccessPolicy::Private;

PFLobbyJoinConfiguration memberConfiguration{};

PFLobbyHandle lobby;
HRESULT hr = PFMultiplayerCreateAndJoinLobbyWithEntityHandle(
    pfmHandle,
    entityHandle,
    &lobbyConfiguration,
    &memberConfiguration,
    nullptr,
    &lobby);

if (FAILED(hr))
{
    std::wcerr << L"Failed to create and join lobby: 0x" << std::hex << hr << std::endl;
    return hr;
}

std::wcout << L"Lobby created and joined successfully" << std::endl;
```

🎉 **素晴らしい!** Party ネットワーキングと Multiplayer ロビーサービスの両方をセットアップしました。

## リソースのクリーンアップ

ゲームがシャットダウンする際や PlayFab リソースをクリーンアップする必要がある場合は、正しい順序で適切にクリーンアップを行ってください:

```cpp theme={null}
// Clean up Party singleton
partyManager.Cleanup();

// Clean up Multiplayer handle
PFMultiplayerUninitialize(pfmHandle);

// Close entity handle
PFEntityCloseHandle(entityHandle);
entityHandle = nullptr;

// Close service config handle
PFServiceConfigCloseHandle(serviceConfigHandle);
serviceConfigHandle = nullptr;

// Uninitialize PlayFab Services
XAsyncBlock asyncBlock{};
HRESULT hr = PFServicesUninitializeAsync(&asyncBlock);
if (SUCCEEDED(hr))
{
    hr = XAsyncGetStatus(&asyncBlock, true); // Blocking wait for cleanup completion
}
```

<Info>
  リソースは必ず次の順序でクリーンアップしてください: Party、Multiplayer、エンティティハンドル、サービス構成、そして PlayFab Services。
</Info>

## 次のステップ

Party と Multiplayer のセットアップが完了したので、次はこれらの追加機能を探索しましょう:

### Party ネットワーキング機能

* **音声チャット** - Azure Cognitive Services 統合によるリアルタイム音声通信を有効にする
* **テキストチャット** - 翻訳とモデレーションを備えたテキストメッセージングを実装する
* **データチャネル** - プレイヤー間でカスタムゲームデータを送信する
* **ネットワーク管理** - プレイヤーの接続、切断、ネットワークイベントを処理する

### Multiplayer ロビー機能

* **マッチメイキング統合** - ロビーを PlayFab マッチメイキングに接続する
* **ロビープロパティ** - ゲーム設定とメタデータを保存および同期する
* **メンバーデータ** - ロビー内でプレイヤー固有の情報を共有する
* **検索と発見** - パブリックロビーを見つけて参加する

### コアコンセプト

* [非同期操作](/services/playfab/sdks/unified-sdk/async-model) - PlayFab の非同期プログラミングモデルの理解
* [メモリ管理](/services/playfab/sdks/unified-sdk/memory-management) - SDK のメモリ管理のベストプラクティス
* [トレースと診断](/services/playfab/sdks/unified-sdk/debug-trace) - 統合のデバッグと監視

## リファレンスドキュメント

* [PlayFab Party SDK ドキュメント](/services/playfab/multiplayer/networking/party-sdks/overview)
* [PlayFab Multiplayer SDK ドキュメント](/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/lobby-matchmaking-sdks)


## Related topics

- [プレイヤーデータのクイックスタート](/ja-jp/services/playfab/player-progression/player-data/quickstart.md)
- [プレイヤー カスタム プロパティのクイックスタート](/ja-jp/services/playfab/live-service-management/game-configuration/segmentation/player-custom-properties-qs.md)
- [プレイヤー インベントリのクイックスタート](/ja-jp/services/playfab/economy-monetization/economy-v2/inventory/quickstart.md)
- [PlayFab マルチプレイヤー ドキュメント](/ja-jp/services/playfab/multiplayer/index.md)
- [クイックスタート (Windows) - PlayFab サービスの呼び出し](/ja-jp/services/playfab/sdks/unified-sdk/quickstart-services.md)
