Azure PlayFab のロビー機能を試してみた

元情報はPlayFabの[ブログ](https://blog.playfab.com/blog/building-lobbies-with-azure-playfab)

PlayFab のマッチメイキングは条件に合った人たちを先着でマッチングさせるため、ロビーで待機するという概念がありませんでした
今回Azure のサービスも利用しロビーを実装するサンプルが出てきたので試してみたいと思います


### Tic-Tac-Toe のセットアップをする
(1)PlayFabにテスト用のタイトルを作っておく

(2)Project ファイルを GitHub から任意のフォルダに Clone する

```
git clone https://github.com/southworks/playfab-samples.git
```

(3)Unity および [Unity Editor Extension Asset Package](https://aka.ms/playfabunitysdkdownload) を準備しておく

(4)CosmosDB を設定する(詳しくは[こちら](https://github.com/southworks/playfab-samples/blob/master/multiplayer-tic-tac-toe/AzureFunctions/cosmos-db-configuration.md))
　「PlayFabTicTacToe」データベースを作成
![PF_Lobby_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/67fb92c4-91f2-d32b-b98b-434a8a2f95db.png)

(5)作成したデータベースにコンテナ「MatchLobby」を作成
　　パーティションキーは「/MatchLobbyId」に設定
![PF_Lobby_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/5728418e-d220-0a7d-b7ba-9794d30dbf02.png)

(6)CORS に許可されたドメインとして「*(アスタリスク)」を記入し「保存」をクリック
![PF_Lobby_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/66f5c7df-375a-0406-8c99-f721b7228ccb.png)

(7)キーの「プライマリ接続文字列」はこの後のAzure Functions の設定で必要になるのでメモしておく
![PF_Lobby_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/d3c5ed38-0c62-39cc-2931-ab589787026f.png)

(8)Azure Functions を設定する(詳しい手順は[こちら](https://github.com/southworks/playfab-samples/blob/master/multiplayer-tic-tac-toe/AzureFunctions/README.md))
↓ 下記の様に Azure Functions に追加する
![PF_Lobby_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/6a26d20e-ed6c-9672-56b5-c7d05cea4ae7.png)
![PF_Lobby_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/b9be7580-9b9d-a226-0e60-de6aeb8e0251.png)

(9)PlayFab のマッチメイキングに新しいキューを追加
追加項目は下記
　キュー 名: TicTacToeQuickMatch.
　対戦人数: 最小 = 2; 最大 = 2.
　ルール:
　　ルール名: UserSkillRule.
　　加重: 1.
　　種類: 文字列等価ルール
　　属性ソース: ユーザー
　　属性パス: Skill
　　属性が指定されていない場合の動作: 任意の相手とマッチング
![PF_Lobby_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/cea98e32-1cf8-1356-bad4-d718f04a489f.png)

(10)Azure Functions をPlayFab側に全て登録
![PF_Lobby_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/7e553e48-18ec-c340-e484-2bd700f08ac0.png)

(11)Unity Hub から Tic-Tac-Toe Project を起動(TicTacToeフォルダを起動)

(12)PlayFab Unity Package をインストール
手順はこちらを[参照](https://qiita.com/ume67026265/items/c89b391e36855f45586f)

(13)PlayFabSharedSettings に対象の TitleID と Secret key を記入
![PF_Lobby_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/21f5938e-f88e-1ff9-430f-d541f5933144.png)

(14)Asset > Script >  Constants.cs に TiletID を追記
![PF_Lobby_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/c60ff956-2cb8-a7d7-6f12-81235f8a72a7.png)

(15)Build And Run を実施すると下図のような画面が表示され、マッチングのテストが可能
![PF_Lobby_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/8d9d70a4-fbe1-b238-ae6f-35937487841d.png)

問題なく起動するとロビーを作ったり、マッチングが簡易的に実行できます
ロビーを作ったユーザにはこのように表示される
![PF_Lobby_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/91101edc-9d1f-ce78-75b7-69b807b7d309.png)

マッチング待ちの場合、「Search」ボタンを押すとロビー名が表示される
「Join」をクリックすればゲーム開始
![PF_Lobby_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/d43b105f-0206-ef08-deab-a1ad591cbf3c.png)

PlayFab側にも結果が表示されます。
![PF_Lobby_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/9f613158-75c9-5ee8-7a62-39430b90481c.png)


簡単なオセロゲームができるので是非試してみてください！(ルームを作った人が先攻です)
![PF_Lobby_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/b08ea030-06c2-3f9d-ed6a-7fd03b8bcb63.png)

※今回サンプル通り CosmosDB を使っていますが Redis でも実装可能かと思うので、実際はコストや規模感で適宜変更して利用いただければと思います