クイック スタート: PlayFab マルチプレーヤー Unity プラグイン
PlayFab マルチプレーヤー Unity プラグインの使用を開始します。 以下の手順に従ってパッケージをインストールして、基本的なタスクのコード例を試します。
このクイックスタートは、Unity の PlayFab マルチプレーヤー SDK を使用して最初の API 呼び出しを行うのに役立ちます。 続行する前に、「クイックスタート: Unity の C# 用 PlayFab クライアント ライブラリ」を完了することで、PlayFab アカウントを作成し、ゲームと PlayFab ゲーム マネージャーからの PlayFab へのログインに精通してください。
注意
このプラグインを使用して Microsoft Game Development Kit (GDK) に基づくゲームを開発する場合は、GDK を個別に入手してインストールする必要があります。 Xbox コンソールの Game Core 用 Unity アドオンの詳細もご覧ください。
要件
インストール済みの Unity エディターのコピー。 Unity Hub を介して個人的に使用するために Unity をインストールする、または業務用に Unity+ をインストールするには、「Unity のダウンロード」を参照してください。 必要に応じて、特定のプラットフォームの説明書で Unity サポートを確認してください。 サポートされている Unity の最小バージョンは Unity 2017 LTS です。
Unity プロジェクト – これは次のいずれかになります。
- まったく新しいプロジェクト: 詳細については、「Unity を初めて起動する」を参照してください。
- ガイド付きチュートリアル プロジェクト。 詳細については、「Unity の使用を開始する」を参照してください。
- 既存のプロジェクト。
PlayFab "core" Unity3D SDK (マルチプレーヤー Unity プラグインにも含まれています)。 Unity3D SDK のインストールについては、「クイックスタート: Unity の C# 用 PlayFab クライアント ライブラリ」の「PlayFab SDK のダウンロードとインストール」セクションを参照してください。
PlayFab マルチプレーヤー Unity プラグインをダウンロードしてインストールする
PlayFab マルチプレーヤー Unity プラグインをダウンロードしてインストールする手順に従います。
- PlayFab マルチプレーヤー Unity プラグイン アセット パッケージをダウンロードします (プラットフォームに応じて配布ポイントを使用します)。
- 重要! プラグインで公開されている README ファイルの情報を参照してください。 特定のバージョンごとに調整されており、プラットフォームに固有の重要な手順が含まれている場合があります。
- Unity プロジェクトを開きます。
- .unitypackage を保存した場所に移動し、それをダブルクリックしてインポート ダイアログを開きます。
- PlayFab マルチプレーヤー Unity プラグインをプロジェクトにインポートするには、[インポート] を選択します。
注: 必要に応じて、新しいバージョンの PlayFab "core" Unity SDK をインストールする必要がある場合があります。
シーンを設定する
ガイドのこの部分では、シーンに PlayfabMultiplayerEventProcessor
を追加して、Unity から PlayFab マルチプレーヤー API を呼び出せるようにする方法を説明します。
マルチプレーヤー API を作成する前に、PlayFab プレーヤーにログインしておく必要があります。 プレーヤーへのログインについては、「クイックスタート: Unity の C# 用 PlayFab クライアント ライブラリ」の「最初の API 呼び出しを行う」を参照してください。
Unity エディターの [プロジェクト] ウィンドウで、[アセット] > [PlayFabMultiplayerSDK] > [プレハブ] に移動します。
[プレハブ] フォルダーから、PlayfabMultiplayerEventProcessor を [階層] ウィンドウのシーンにドラッグ アンド ドロップします。
"HelloMultiplayerLogic" という名前の空のゲーム オブジェクトをシーンに作成します。
[HelloMultiplayerLogic ゲーム オブジェクト] を選択して、[インスペクター] を開きます。
[コンポーネントの追加] を選択します。
"HelloMultiplayerLogic" と入力し、Enter キーを押して、新しいスクリプト メニューを表示します。
もう一度 Enter キーを押して、新しいスクリプト HelloMultiplayerLogic.cs を作成します。
[プロジェクト] ウィンドウでスクリプトを見つけてダブルクリックし、スクリプトを編集します。
次のステートメントをスクリプトに追加します。
using PlayFab; using PlayFab.Multiplayer; using PlayFab.ClientModels;
Start メソッドに次のコードを追加して、PlayFab にログインします。
// Log into playfab var request = new LoginWithCustomIDRequest { CustomId = UnityEngine.Random.value.ToString(), CreateAccount = true }; PlayFabClientAPI.LoginWithCustomID(request, OnLoginSuccess, OnLoginFailure);
次のメソッドをクラスに追加します。
private void OnLoginSuccess(LoginResult result) { } private void OnLoginFailure(PlayFabError error) { }
注意
次のエラーが表示される場合があります。
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".
Microsoft GDK および Windows は x64 のみをサポートします。
これらの問題を解決するには:
- Unity エディターで、[ファイル] > [ビルド設定] を選択します。
- プラットフォームを選択します。 次に、[アーキテクチャ] ドロップダウンから、x86\_64 または x64 のいずれかを選択します。
- [プレーヤーの設定] を選択します。
- 右側のウィンドウで、[その他の設定] を選択します。
- [安全でないコードを許可する] 設定を見つけて選択します。
- [ビルドの設定] ウィンドウと [プロジェクトの設定] ウィンドウを閉じます。
ロビーの作成と参加
ガイドのこの部分では、ロビーを作成して参加する方法を説明します。
HelloMultiplayerLogic.cs スクリプトを開きます。
OnLoginSuccess
メソッドで、次のコードを追加し、ロビーを作成して参加します。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);
OnLobbyCreateAndJoinCompleted イベント ハンドラーを定義するには、次のコードをクラスに追加します。
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"); } }
OnLobbyDisconnected イベント ハンドラーを定義するには、次のコードをクラスに追加します。
private void PlayFabMultiplayer_OnLobbyDisconnected(Lobby lobby) { // Disconnected from lobby Debug.Log("Disconnected from lobby!"); }
Unity エディターで保存して [再生] を選択します。 ロビー接続文字列が [コンソール] ウィンドウに表示されます。
ロビーに参加する
ガイドのこの部分では、別のクライアントが作成した既存のロビーに参加する方法を説明します。
HelloMultiplayerLogic.cs スクリプトを開きます。 OnLoginSuccess メソッドで、次のコードを追加してロビーに参加します。
PFEntityKey entityKey = ...; // PlayFab user's entity key string connectionString = "<your lobby connection string>"; PlayFabMultiplayer.JoinLobby( entityKey, connectionString, null);
ローカル クライアントがロビーに参加したときに発生するイベントを定義するには、
OnLoginSuccess
メソッドに次のコードを追加します。PlayFabMultiplayer.OnLobbyJoinCompleted += this.PlayFabMultiplayer_OnLobbyJoinCompleted;
OnLobbyJoinCompleted イベント ハンドラーを定義するには、次のコードをクラスに追加します。
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"); } }
Unity エディターで保存して [再生] を選択します。 コンソール ウィンドウに "ロビーに参加しました" という文字列が表示されます。
ロビーを検索する
ガイドのこの部分では、他のクライアントが作成した既存のロビーを見つける方法について説明します。
HelloMultiplayerLogic.cs スクリプトを開きます。 OnLoginSuccess メソッドで、次のコードを追加してロビーを検索します。
PFEntityKey entityKey = ...; // PlayFab user's entity key LobbySearchConfiguration config = new LobbySearchConfiguration(); PlayFabMultiplayer.FindLobbies(entityKey, config);
ローカル クライアントがロビーを見つけたときに発生するイベントを定義するには、
OnLoginSuccess
メソッドに次のコードを追加します。PlayFabMultiplayer.OnLobbyFindLobbiesCompleted += this.PlayFabMultiplayer_OnLobbyFindLobbiesCompleted;
OnLobbyFindLobbiesCompleted イベント ハンドラーを定義するには、次のコードをクラスに追加します。
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"); } }
Unity エディターで保存して [再生] を選択します。 コンソール ウィンドウに "ロビーが見つかりました" という文字列が表示されます。
マッチメイキング チケットを作成する
ガイドのこの部分では、マッチメイキング チケットを作成する方法を説明します。 以下の別のクライアントでシナリオ "マッチメイキング チケットに参加する" と組み合わせて実行してください。
HelloMultiplayerLogic.cs スクリプトを開きます。
OnLoginSuccess
メソッドで、次のコードを追加し、マッチメイキング チケットを作成します。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);
OnMatchmakingTicketStatusChanged イベント ハンドラーを定義するには、次のコードをクラスに追加します。
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 }
Unity エディターで保存して [再生] を選択します。
membersToMatchWith が指定されている場合、1 つの OnMatchmakingTicketStatusChanged イベント ハンドラーがトリガーされ、状態は WaitingForPlayers になります。 その場合、別のクライアントが JoinMatchmakingTicketFromId を呼び出すと、新しい OnMatchmakingTicketStatusChanged イベント ハンドラーがトリガーされ、今回の状態は WaitingForMatch になります。
または、1 つの OnMatchmakingTicketStatusChanged イベント ハンドラーがトリガーされ、状態は WaitingForMatch になります。
マッチメイキング チケットに参加する
ガイドのこの部分では、別のクライアントが作成した既存のマッチメイキング チケットに参加する方法を説明します。 上の別のクライアントでシナリオ "マッチメイキング チケットを作成する" と組み合わせて実行してください。
HelloMultiplayerLogic.cs スクリプトを開きます。 OnLoginSuccess メソッドで、次のコードを追加してマッチメイキング チケットに参加します。
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>());
OnMatchmakingTicketStatusChanged イベント ハンドラーを定義するには、次のコードをクラスに追加します。
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 }
Unity エディターで保存して [再生] を選択します。
1 つの OnMatchmakingTicketStatusChanged がトリガーされ、状態が WaitingForMatch になります。
マッチメイキング チケットを完了する
ガイドのこの部分では、マッチメイキングを完了する方法について説明します。 上の別のクライアントでシナリオ "マッチメイキング チケットを作成する" と組み合わせて実行してください。 必要に応じて、シナリオ "マッチメイキング チケットに参加する" と組み合わせて実行できます。
同じキュー内の複数のチケットが照合対象になると、一致が見つかります。 その場合、OnMatchmakingTicketCompleted イベント ハンドラーがトリガーされます。
OnMatchmakignTicketCompleted ハンドラーをサブスクライブする
PlayFabMultiplayer.OnMatchmakingTicketCompleted += PlayFabMultiplayer_OnMatchmakingTicketCompleted;
OnMatchmakingTicketCompleted イベント ハンドラーを定義するには、次のコードをクラスに追加します。
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"); } }