> ## 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.

# Multiplayer Unity プラグイン クイックスタート

> PlayFab Multiplayer Unity プラグインをインストールし、GDK のセットアップに関する考慮事項を含め、Unity プロジェクトから最初の Lobby および Matchmaking API 呼び出しを行います。

# クイックスタート: PlayFab Multiplayer Unity プラグイン

PlayFab Multiplayer Unity プラグインを使い始めます。以下の手順に従ってパッケージをインストールし、基本的なタスクのサンプル コードを試してください。

このクイックスタートは、Unity 用 PlayFab Multiplayer SDK を使って最初の API 呼び出しを行うのに役立ちます。続行する前に、[クイックスタート: Unity での C# 用 PlayFab クライアント ライブラリ](/services/playfab/sdks/unity3d/quickstart) を完了して、PlayFab アカウントを持っており、ゲームからの PlayFab ログインと PlayFab Game Manager に慣れていることを確認してください。

<Note>
  Microsoft Game Development Kit (GDK) を基にしたゲームを開発するためにこのプラグインを使用する予定の場合は、GDK を別途取得してインストールする必要があります。XBOX コンソールの Game Core 用 Unity アドオンについても詳細をご覧ください。
</Note>

## 要件

* [PlayFab 開発者アカウント](https://developer.playfab.com)。

* インストール済みの Unity Editor。Unity Hub 経由で個人使用の Unity をインストールする方法や、プロフェッショナル使用の Unity+ については、[Unity のダウンロード](https://unity3d.com/get-unity/download) を参照してください。必要に応じて特定のプラットフォームのドキュメントで Unity のサポートを確認してください。サポートされる最小 Unity バージョンは Unity 2017 LTS です。

* Unity プロジェクト - 次のいずれかにできます:

  * まったく新しいプロジェクト: 詳細については、[Unity を初めて起動する](/services/playfab/sdks/unity3d/quickstart) を参照してください。
  * ガイド付きチュートリアル プロジェクト。詳細については、[Unity を始める](https://learn.unity.com/) を参照してください。
  * 既存のプロジェクト。

* PlayFab の「コア」Unity3D SDK (Multiplayer Unity プラグインにも含まれています)。Unity3D SDK のインストールに関する情報については、[クイックスタート: Unity での C# 用 PlayFab クライアント ライブラリ](/services/playfab/sdks/unity3d/quickstart#download-and-install-playfab-sdk) の「Download and install PlayFab SDK」セクションを参照してください。

## PlayFab Multiplayer Unity プラグインのダウンロードとインストール

PlayFab Multiplayer Unity プラグインをダウンロードしてインストールするには、以下の手順に従います。

1. PlayFab [Multiplayer Unity Plugin](https://github.com/PlayFab/PlayFabMultiplayerUnity) の Asset パッケージをダウンロードします (プラットフォームに応じた配布ポイントを使用します)。
2. **重要!** プラグインとともに公開されている README ファイルの情報を参照してください。これは各特定バージョンに合わせて調整されており、プラットフォーム固有の重要な指示が含まれる場合があります。
3. Unity プロジェクトを開きます。
4. .unitypackage を保存した場所に移動し、ダブルクリックしてインポート ダイアログを開きます。
5. PlayFab Multiplayer Unity プラグインをプロジェクトにインポートするには、**Import** を選択します。

注: 必要に応じて、より新しいバージョンの PlayFab「コア」Unity SDK をインストールする必要がある場合があります。

## シーンをセットアップする

ガイドのこの部分では、Unity から PlayFab Multiplayer API を呼び出せるようにするため、シーンに `PlayfabMultiplayerEventProcessor` を追加する方法を説明します。

Multiplayer API を使用する前に、**PlayFab プレイヤーがログインしている必要があります**。プレイヤーのログインに関する情報については、[クイックスタート: Unity での C# 用 PlayFab クライアント ライブラリの最初の API 呼び出しを行う](/services/playfab/sdks/unity3d/quickstart#making-your-first-api-call) を参照してください。

1. Unity Editor の Project ウィンドウで、**Assets > PlayFabMultiplayerSDK > Prefabs** に移動します。

2. Prefabs フォルダーから、**PlayfabMultiplayerEventProcessor** を **Hierarchy** ウィンドウのシーンにドラッグ アンド ドロップします。

3. 「HelloMultiplayerLogic」という空の Game Object をシーンに作成します。

4. HelloMultiplayerLogic Game Object を選択して **Inspector** を開きます。

5. **Add Component** を選択します。

6. 「HelloMultiplayerLogic」と入力して Enter キーを押し、新しいスクリプト メニューを表示します。

7. もう一度 Enter キーを押して、新しいスクリプト HelloMultiplayerLogic.cs を作成します。

8. **Project** ウィンドウでスクリプトを見つけ、ダブルクリックしてスクリプトを編集します。

9. 次の using ステートメントをスクリプトに追加します:

   ```csharp theme={null}
   using PlayFab;
   using PlayFab.Multiplayer;
   using PlayFab.ClientModels;
   ```

10. Start メソッドに次のコードを追加して、PlayFab にログインします。

    ```csharp theme={null}
    // Log into playfab
    var request = new LoginWithCustomIDRequest { CustomId = UnityEngine.Random.value.ToString(), CreateAccount = true };
    PlayFabClientAPI.LoginWithCustomID(request, OnLoginSuccess, OnLoginFailure);
    ```

11. 次のメソッドをクラスに追加します。

    ```csharp theme={null}
    private void OnLoginSuccess(LoginResult result)
    {
    }

    private void OnLoginFailure(PlayFabError error)
    {
    }
    ```

<Note>
  次のようなエラーが表示される場合があります: `C \# Error CS0227 Unsafe code may only appear if compiling with /unsafe The plugin requires unsafe code because it interops with a native DLL. Mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "XGamingRuntime", "AMD64".`
</Note>

Microsoft GDK および Windows は x64 のみをサポートしています。

これらの問題を解決するには:

1. Unity Editor で、**File > Build Settings** を選択します。
2. プラットフォームを選択します。次に **Architecture** ドロップダウンから、x86\_64 または x64 のいずれかを選択します。
3. **Player Settings** を選択します。
4. 右ペインで Other Setting を選択します。
5. **Allow unsafe Code** 設定を見つけて選択します。
6. **Build Settings** および **Project Settings** ウィンドウを閉じます。

## ロビーを作成して参加する

ガイドのこの部分では、ロビーを作成して参加する方法を説明します。

1. HelloMultiplayerLogic.cs スクリプトを開きます。`OnLoginSuccess` メソッドに、ロビーを作成して参加するための次のコードを追加します:

   ```csharp theme={null}
   string entityId = ...; // PlayFab user's entity Id
   string entityType = ...; // PlayFab user's entity type

   PlayFabMultiplayer.OnLobbyCreateAndJoinCompleted += this.PlayFabMultiplayer_OnLobbyCreateAndJoinCompleted;
   PlayFabMultiplayer.OnLobbyDisconnected += this.PlayFabMultiplayer_OnLobbyDisconnected;

   var createConfig = new LobbyCreateConfiguration()
   {
       MaxMemberCount = 10,
       OwnerMigrationPolicy = LobbyOwnerMigrationPolicy.Automatic,
       AccessPolicy = LobbyAccessPolicy.Public
   };

   createConfig.LobbyProperties["Prop1"] = "Value1";
   createConfig.LobbyProperties["Prop2"] = "Value2";

   var joinConfig = new LobbyJoinConfiguration();
   joinConfig.MemberProperties["MemberProp1"] = "MemberValue1";
   joinConfig.MemberProperties["MemberProp2"] = "MemberValue2";

   PlayFabMultiplayer.CreateAndJoinLobby(
       new PFEntityKey(
           entityId,
           entityType),
       createConfig,
       joinConfig);
   ```

2. OnLobbyCreateAndJoinCompleted イベント ハンドラーを定義するには、クラスに次のコードを追加します:

   ```csharp theme={null}
   private void PlayFabMultiplayer_OnLobbyCreateAndJoinCompleted(Lobby lobby, int result)
   {
       if (LobbyError.SUCCEEDED(result))
       {
           // Lobby was successfully created
           Debug.Log(lobby.ConnectionString);
       }
       else
       {
           // Error creating a lobby
           Debug.Log("Error creating a lobby");
       }
   }
   ```

3. OnLobbyDisconnected イベント ハンドラーを定義するには、クラスに次のコードを追加します:

   ```csharp theme={null}
   private void PlayFabMultiplayer_OnLobbyDisconnected(Lobby lobby)
   {
       // Disconnected from lobby
       Debug.Log("Disconnected from lobby!");
   }
   ```

4. 保存して Unity Editor で Play を選択します。Console ウィンドウにロビー接続文字列が表示されます。

## ロビーに参加する

ガイドのこの部分では、別のクライアントが作成した既存のロビーに参加する方法を説明します。

1. HelloMultiplayerLogic.cs スクリプトを開きます。OnLoginSuccess メソッドに、ロビーに参加するための次のコードを追加します:

   ```csharp theme={null}
   PFEntityKey entityKey = ...; // PlayFab user's entity key

   string connectionString = "<your lobby connection string>";

   PlayFabMultiplayer.JoinLobby(
           entityKey,
           connectionString,
           null);
   ```

2. ローカル クライアントがロビーに参加したときに発生するイベントを定義するには、`OnLoginSuccess` メソッドに次のコードを追加します:

   ```csharp theme={null}
   PlayFabMultiplayer.OnLobbyJoinCompleted += this.PlayFabMultiplayer_OnLobbyJoinCompleted;
   ```

3. OnLobbyJoinCompleted イベント ハンドラーを定義するには、クラスに次のコードを追加します:

   ```csharp theme={null}
   private void PlayFabMultiplayer_OnLobbyJoinCompleted(Lobby lobby, PFEntityKey newMember, int reason)
   {
       if (LobbyError.SUCCEEDED(reason))
       {
           // Successfully joined a lobby
           Debug.Log("Joined a lobby");
       }
       else
       {
           // Error joining a lobby
           Debug.Log("Error joining a lobby");
       }
   }
   ```

4. 保存して Unity Editor で Play を選択します。Console ウィンドウに「Joined a lobby」という文字列が表示されます。

## ロビーを検索する

ガイドのこの部分では、他のクライアントが作成した既存のロビーを検索する方法を説明します。

1. HelloMultiplayerLogic.cs スクリプトを開きます。OnLoginSuccess メソッドに、ロビーを検索するための次のコードを追加します:

   ```csharp theme={null}
   PFEntityKey entityKey = ...; // PlayFab user's entity key

   LobbySearchConfiguration config = new LobbySearchConfiguration();
   PlayFabMultiplayer.FindLobbies(entityKey, config);
   ```

2. ローカル クライアントがロビーを見つけたときに発生するイベントを定義するには、`OnLoginSuccess` メソッドに次のコードを追加します:

   ```csharp theme={null}
   PlayFabMultiplayer.OnLobbyFindLobbiesCompleted += this.PlayFabMultiplayer_OnLobbyFindLobbiesCompleted;
   ```

3. OnLobbyFindLobbiesCompleted イベント ハンドラーを定義するには、クラスに次のコードを追加します:

   ```csharp theme={null}
   private void PlayFabMultiplayer_OnLobbyFindLobbiesCompleted(
       IList<LobbySearchResult> searchResults, 
       PFEntityKey newMember, 
       int reason)
   {
       if (LobbyError.SUCCEEDED(reason))
       {
           // Successfully found lobbies
           Debug.Log("Found lobbies");

           // Iterate through lobby search results
           foreach (LobbySearchResult result in searchResults)
           {
               // Examine a search result
           }
       }
       else
       {
           // Error finding lobbies
           Debug.Log("Error finding lobbies");
       }
   }
   ```

4. 保存して Unity Editor で Play を選択します。Console ウィンドウに「Found lobbies」という文字列が表示されます。

## マッチメイキング チケットを作成する

ガイドのこの部分では、マッチメイキング チケットの作成方法を説明します。以下の別のクライアントでの「マッチメイキング チケットに参加する」のシナリオと一緒に実行してください。

1. HelloMultiplayerLogic.cs スクリプトを開きます。`OnLoginSuccess` メソッドに、マッチメイキング チケットを作成するための次のコードを追加します:

   ```csharp theme={null}
   PFEntityKey entityKey = ...; // PlayFab user's entity key
   PFEntityKey remoteEntityKey = ...; // another PlayFab user's entity key
   string remoteUserAttributesJson = ...; // JSON string with another PlayFab user's attributes for matchmaking

   PlayFabMultiplayer.OnMatchmakingTicketStatusChanged += PlayFabMultiplayer_OnMatchmakingTicketStatusChanged;

   List<MatchUser> localUsers = new List<MatchUser>();
   localUsers.Add(new MatchUser(entityKey, remoteUserAttributesJson));

   List<PFEntityKey> membersToMatchWith = new List<PFEntityKey>();
   membersToMatchWith.Add(remoteEntityKey);

   PlayFabMultiplayer.CreateMatchmakingTicket(
       localUsers,
       "QuickMatchQueueName",
       membersToMatchWith);
   ```

2. OnMatchmakingTicketStatusChanged イベント ハンドラーを定義するには、クラスに次のコードを追加します:

   ```csharp theme={null}
   private void PlayFabMultiplayer_OnMatchmakingTicketStatusChanged(MatchmakingTicket ticket)
   {
       // Store and print matchmaking ticket
       Debug.Log(ticket.TicketId);

       // Examine matchmaking ticket status
       Debub.Log(ticket.Status)

       // Share matchmaking ticket with other clients taking part in matchmaking

       // Examine ticket
   }
   ```

3. 保存して Unity Editor で Play を選択します。

membersToMatchWith が指定されている場合、1 つの OnMatchmakingTicketStatusChanged イベント ハンドラーがトリガーされ、Status は WaitingForPlayers になります。その場合、別のクライアントが JoinMatchmakingTicketFromId を呼び出すと、新しい OnMatchmakingTicketStatusChanged イベント ハンドラーがトリガーされ、今回のステータスは WaitingForMatch になります。

または、1 つの OnMatchmakingTicketStatusChanged イベント ハンドラーがトリガーされ、ステータスは WaitingForMatch になります。

## マッチメイキング チケットに参加する

ガイドのこの部分では、別のクライアントが作成した既存のマッチメイキング チケットに参加する方法を説明します。上記の別のクライアントでの「マッチメイキング チケットを作成する」のシナリオと一緒に実行してください。

1. HelloMultiplayerLogic.cs スクリプトを開きます。OnLoginSuccess メソッドに、マッチメイキング チケットに参加するための次のコードを追加します:

   ```csharp theme={null}
   PFEntityKey entityKey = ...; // PlayFab user's entity key
   string ticketId = ...; // Matchmaking ticket obtained from the client that created the ticket

   PlayFabMultiplayer.OnMatchmakingTicketCompleted += PlayFabMultiplayer_OnMatchmakingTicketStatusChanged;

   // Create JSON string with PlayFab user's attributes for matchmaking. This will need to be shared with other clients taking part in matchmaking
   string uniqueId = System.Guid.NewGuid().ToString();
   string userAttributesJson = "{\"MatchIdentifier\": \"" + uniqueId + "\"}";

   PlayFabMultiplayer.JoinMatchmakingTicketFromId(
       new MatchUser(entityKey, userAttributesJson),
       ticketId,
       "QuickMatchQueueName",
       new List<PFEntityKey>());
   ```

2. OnMatchmakingTicketStatusChanged イベント ハンドラーを定義するには、クラスに次のコードを追加します:

   ```csharp theme={null}
   private void PlayFabMultiplayer_OnMatchmakingTicketStatusChanged(MatchmakingTicket ticket)
   {
       // Store and print matchmaking ticket
       Debug.Log(ticket.TicketId);

       // Examine matchmaking ticket status
       Debub.Log(ticket.Status)

       // Share matchmaking ticket with other clients taking part in matchmaking

       // Examine ticket
   }
   ```

3. 保存して Unity Editor で Play を選択します。

Status が WaitingForMatch の 1 つの OnMatchmakingTicketStatusChanged がトリガーされます。

## マッチメイキング チケットを完了する

ガイドのこの部分では、マッチメイキングが完了する方法を説明します。上記の別のクライアントでの「マッチメイキング チケットを作成する」のシナリオと一緒に実行してください。オプションで「マッチメイキング チケットに参加する」のシナリオと一緒に実行することもできます。

1. 同じキュー内の複数のチケットがマッチする資格を得ると、マッチが見つかります。その場合、OnMatchmakingTicketCompleted イベント ハンドラーがトリガーされます。

2. OnMatchmakignTicketCompleted ハンドラーをサブスクライブします

   ```csharp theme={null}
   PlayFabMultiplayer.OnMatchmakingTicketCompleted += PlayFabMultiplayer_OnMatchmakingTicketCompleted;
   ```

3. OnMatchmakingTicketCompleted イベント ハンドラーを定義するには、クラスに次のコードを追加します:

   ```csharp theme={null}
   private void PlayFabMultiplayer_OnMatchmakingTicketCompleted(MatchmakingTicket ticket, int result)
   {
       if (LobbyError.SUCCEEDED(result))
       {
           // Successfully completed matchmaking ticket
           Debug.Log("Completed matchmaking ticket");

           // Examine matchmaking details
           MatchmakingMatchDetails details = ticket.GetMatchDetails();
       }
       else
       {
           // Error completing a matchmaking ticket
           Debug.Log("Error completing a matchmaking ticket");
       }
   }
   ```


## Related topics

- [プッシュ通知クイックスタート](/ja-jp/services/playfab/live-service-management/game-configuration/title-communications/push-notifications/quickstart.md)
- [Unreal Engine クイックスタート](/ja-jp/services/playfab/sdks/unreal/quickstart.md)
- [Photon クイックスタート](/ja-jp/services/playfab/live-service-management/service-gateway/add-ons/photon/quickstart.md)
- [Unity クイックスタート](/ja-jp/services/playfab/sdks/unity3d/quickstart.md)
- [Corona 向け Lua クイックスタート](/ja-jp/services/playfab/sdks/lua/quickstart-corona.md)
