【Unity】PhotonFusion + PhotonVoice2 導入方法【ボイスチャット】

本記事はUnityアドベントカレンダー2022 その2 6日目に参加しております。
5日目： [Unityと箱庭](https://qiita.com/kaizen_nagoya/items/7ae193df6efa1d2f2ba0) (@kaizen_nagoya )
6日目： 本記事
7日目： [Samplerが消える問題](https://qiita.com/ayaha401/items/55f773e2c40dcb937b7f) (@ayaha401 )

# TL;DR
日本語ドキュメントは翻訳が未対応の場合もあるので
基本的には1次ソースの英語公式ドキュメントを見ながらやればOK

# 背景
PhotonVoice2 v2.5.0 で結構な破壊的変更や既存クラスのリネーム等がありました。
しかし記事執筆時点(2022年11月25日　現在) では [日本語公式ドキュメント](https://doc.photonengine.com/ja-jp/voice/v2/getting-started/voice-for-fusion) がメンテ未対応のため、日本語ドキュメント通りに導入しようとすると詰む状態でした。

そこでPhotonFusion + PhotonVoice2 の導入フローを備忘録を兼ねて紹介します。

# 検証環境
| 項目 | 環境 |
|---|--- |
|Unity | 2021.3.14f1 |
| OS | MacOSX 12.4 |
| 検証端末 | Pixel6, Pixel7 Pro |
| PhotonFusion | v1.1.4 |
| PhotonVoice2 | v2.5.0 |

# 導入フロー
フローとしては以下のようになります。

1. Unityを入れる
2. Unity でProjectを作る
3. Photon アカウントを作る
4. PhotonのダッシュボードでPhotonFusion アプリを作る
    a. PhotonFusion 利用のためのAppId を発行する
5. PhotonのダッシュボードでPhotonVoice アプリを作る
    a. PhotonVoice 利用のためのVoiceAppId を発行する
6. PhotonFusionを導入
    a. 公式からUnityPackage をDL
    b. 2のProjectにImport
6. PhotonVoice2 を導入
    a. AssetStoreでPhotonVoice2 を検索&MyAsset に追加
    b. PackageManager 経由でDL&Import
    c.
7. PhotonのConfigファイルに4-a, 5-a で手に入れたIDを入力
8. サンプルで動作チェック

## 1. Unityを入れる
2022年なのでUnityHub 経由で入れましょう.

## 2. Unity でProjectを作る
こちらに関しては新規Projectでも良いし、既存Project でも構いません。
状況に応じて適切な方を選択ください。

## 3. Photon アカウントを作る
1. アカウントがなければ https://id.photonengine.com/Account/SignIn　からCreteOne... を選択してアカウントを発行してください。<br>![スクリーンショット 2022-11-30 12.27.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/651b8d04-bd91-5d1b-330d-92adfb093c79.png)
2. メールアドレスを入力して人間アピールしてRegister ボタンを押せば登録用のメールアドレスが来るのでそこから本登録してください。![スクリーンショット 2022-11-30 12.54.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/a6291118-3f4e-062e-d0c1-771f5bef15de.png)

## 4. PhotonのダッシュボードでPhotonFusion アプリを作る
1. 3で作ったPhotonアカウントでダッシュボード(https://dashboard.photonengine.com/ja-JP/) にログインしてください。
2. 新しくアプリを作成するを選択<br>![スクリーンショット 2022-11-30 12.58.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/1db571a4-6011-7169-6f9d-233d0f3aceea.png)
3. 種別は `Fusion` を選択、アプリ名を設定した後に作成するボタンを押します<br>![スクリーンショット 2022-11-30 13.03.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/a76c056d-318a-3df2-2caf-833aae5e4b65.png)

### a. PhotonFusion 利用のためのAppId を発行する
4 で作った後にダッシュボードで先ほど作ったアプリが表示されています。
ここのアプリケーションIDをクリックすると全部が表示されるます。
このIDを後に使うので覚えておいてください。
![fusionApp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/10f0d4ec-afb3-29eb-fd8b-9289675ad7cb.png)



## 5. PhotonのダッシュボードでPhotonVoice アプリを作る
1. 3で作ったPhotonアカウントでダッシュボード(https://dashboard.photonengine.com/ja-JP/) にログインしてください。
2. 新しくアプリを作成するを選択<br>![スクリーンショット 2022-11-30 12.58.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/1db571a4-6011-7169-6f9d-233d0f3aceea.png)
3. 種別は `Voice` を選択、アプリ名を設定した後に作成するボタンを押します<br> ![スクリーンショット 2022-11-30 13.08.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/31e2b032-549e-364d-df06-380634c20e20.png)

### a. PhotonVoice 利用のためのVoiceAppId を発行する
5 で作った後にダッシュボードで先ほど作ったアプリが表示されています。
ここのアプリケーションIDをクリックすると全部が表示されるます。
このIDを後に使うので覚えておいてください。
![voiceApp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/6b28146e-516a-8ab6-269b-ab34b7f81f44.png)

## 6. PhotonFusionを導入
### a. 公式からUnityPackage をDL
https://doc.photonengine.com/ja-JP/Fusion/current/getting-started/sdk-download
画像の赤線を引いたリンクの部分から、UnityPackage をDLできます。
![スクリーンショット 2022-11-30 16.21.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/640d8944-9ec2-09ea-c975-14248f41cd84.png)

### b. 2のProjectにImport
UnityのProjectウィンドウにDrag&Drop

## 6. PhotonVoice2 を導入
### a. AssetStoreでPhotonVoice2 を検索&MyAsset に追加
https://assetstore.unity.com/packages/tools/audio/photon-voice-2-130518?locale=ja-JP

上記ページからアクセスして、ご自身のUnityアカウントでAssetをカートに入れて購入（無料）してMyAssetに追加してくだあい。

### b. PackageManager 経由でDL&Import
1. Unity のToolBarより `Window` → `PackageManager` と選択
1. PackageManagerウィンドウ上で `Packages をMyAsset` にして `検索窓で voice` と入力することで表示されるはずです。<br> 出てこない場合は以下をお試しください。
    1. UnityHub と6-aのアカウントがリンクされてない
    1. UnityHub でアカウントをサインアウトして再度サインインする
    1. 6-aがカートに追加までで購入処理（MyAssetへ追加）まで出来ていないので再度購入フローを試す
1. Download ボタン押下後、Importボタンを押す
![スクリーンショット 2022-11-30 16.24.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/2b4f633c-1760-2a41-5cfd-238e5bd26a2d.png)

### c. PhotonVoice Import 上の注意
```
・　Uncheck "Photon\PhotonChat" .
・　Uncheck these folders:
　　・　 "Photon\PhotonUnityNetworking"
　　・　 "Photon\PhotonVoice\Code\Pun"
　　・　 "Photon\PhotonVoice\Demos" contents except "Photon\PhotonVoice\Fusion"
```
とある通り、Import 時に `PhotnChat` 系と `PUN` 系はチェックを外してください。
また、Demoが不要であれば `Photon\PhotonVoice\Demos` をまるっとチェック外しても良いですが、もし初めてであれば
`Photon\PhotonVoice\Demos` 以下の `Fusion` 以外はチェックを外すようにすれば PhotonFusion用のVoice2 の組み込みサンプルも導入されます。


## 7. PhotonのConfigファイルに4-a, 5-a で手に入れたIDを入力
1. Unity 上で画像のように `Fusion` → `Realtime Setting` と選ぶと設定ファイルのScriptableObject が選択されます。
![スクリーンショット 2022-11-30 16.32.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/028b4515-6081-abf9-e608-03331b4ed854.png)
2. 4-a, 5-a で生成したIDを入力<br>![id_base_01.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/013d13bb-2d95-8953-0f84-fc0ec6367bb9.jpeg)
3. 再度UnityのToolBarのメニューからは `Fusion` → `NetworkProjectConfig` を選択
4. ConfigファイルのWeaver Settings に `PhotonVoice.Fusion` が追加されているのを確認する<br>![スクリーンショット 2022-11-30 17.04.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/13b0c76a-a78a-025e-c07c-a5dc8c4b6207.png)

## 8. サンプルで動作チェック
Assets/Photon/PhotonVoice/Demos/Fusion/DemoNetworkObject 内のSceneファイルを開き、PC同士または、ビルドしたスマホアプリと通信ができればOKです。

# PhotonVoice2 v2.5.0 の更新内容
公式のReleseNote より
```
Code:
  - Rename VoiceConnection -> UnityVoiceClient
  - Rename PhotonVoiceNetwork -> PunVoiceClient
Fusion:
   REMOVED: FusionVoiceBridge referenced VoiceConnection
   ADDED: FusionVoiceClient extending VoiceConnection
```

とあるように、旧コンポーネントが削除・リネームされました。

v2.5.0現在では音声通信フローとしては以下のような形で実行されます。
![PhotoVoice250.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/09714cb3-e3e2-5b72-45a8-786bff5bdb14.png)


# サンプルを拡張
ボイスチャットを行う上でまず最初に制御したいのは「マイクミュート」だと思います。
マイクミュートは　[公式ドキュメント](https://doc.photonengine.com/ja-jp/voice/v2/getting-started/recorder) にもある通り　｀Recorder.TransmitEnabled` プロパティの値の切り替えで可能です。