Photon Voice2 でボイスチャット（その１：導入）


以前書いたこの記事にボイスチャットを実装してみました。

https://qiita.com/tatsuya1970/items/63560a1e8ffc1adf3c9b



## 動作確認環境

- Unity 2021.3.4f1
- Windows 10

## 準備

Photon のダッシュボードにアクセス
https://dashboard.photonengine.com/ja-JP/

「新しくアプリを作成する」
[![Image from Gyazo](https://i.gyazo.com/b11a3ba9abe200afe709cdc770c743ff.png)](https://gyazo.com/b11a3ba9abe200afe709cdc770c743ff)

Photonの種別で「Voice」を選択し、Voiceアプリを作成する。

[![Image from Gyazo](https://i.gyazo.com/13ffd84602187e04d32ba846525eb666.png)](https://gyazo.com/13ffd84602187e04d32ba846525eb666)


Voice のアプリケーションIDを控えておく　。
[![Image from Gyazo](https://i.gyazo.com/5482e4571dfe431218d9c099f18b6e8a.png)](https://gyazo.com/5482e4571dfe431218d9c099f18b6e8a)

すでにPhotonのアプリケーションを稼働している場合は、該当アプリケーションIDも控えておく。

<br>
PUN2をすでにもってる人は　Assets > Photon のフォルダを削除
(Voice の中にPUN2 が入ってるため）

<br>
Unity AssetStoreから Photon Voice 2 をダウンロード

https://assetstore.unity.com/packages/tools/audio/photon-voice-2-130518


## Unity

Photon Voice 2 をインポート

Photonの設定をする
Projetウィンドウ
Assets > Photon > PhotonUnityNetworking > Resources

[![Image from Gyazo](https://i.gyazo.com/8e1159e4171b02c676d4e2a8a126e851.png)](https://gyazo.com/8e1159e4171b02c676d4e2a8a126e851)


アバターのPrefabのInspector ウィンドウに
Photon Voice View と　Speaker を追加。
Photon View　と　Audio Souceが自動的に追加される。

[![Image from Gyazo](https://i.gyazo.com/f8319008111ef604ae2b05380d7ae2fc.png)](https://gyazo.com/f8319008111ef604ae2b05380d7ae2fc)

Photon Transform View と　Photon Animator View を追加
[![Image from Gyazo](https://i.gyazo.com/d17227a8f43ec5b44660ef9213bdb147.png)](https://gyazo.com/d17227a8f43ec5b44660ef9213bdb147)


<br>
空のオブジェクト「PhotonController」を作り、
以下のスクリプトをアタッチする。

```cs:PhotonController.cs
using Photon.Pun;
using Photon.Realtime;
using UnityEngine;

public class PhotonController : MonoBehaviourPunCallbacks
{
    private void Start()
    {
        // プレイヤー自身の名前を"Player"に設定する
        PhotonNetwork.NickName = "Player";

        // PhotonServerSettingsの設定内容を使ってマスターサーバーへ接続する
        PhotonNetwork.ConnectUsingSettings();
    }

    // マスターサーバーへの接続が成功した時に呼ばれるコールバック
    public override void OnConnectedToMaster()
    {
        // "Room"という名前のルームに参加する（ルームが存在しなければ作成して参加する）
        PhotonNetwork.JoinOrCreateRoom("Room", new RoomOptions(), TypedLobby.Default);
    }

    // ゲームサーバーへの接続が成功した時に呼ばれるコールバック
    public override void OnJoinedRoom()
    {
        //何番目の入室者か
        int num = PhotonNetwork.CurrentRoom.PlayerCount;

        Debug.Log("num: "+num);

        string avatarName="";

        avatarName = "Avatar1";


        // ランダムな座標に自身のアバター（ネットワークオブジェクト）を生成する
        var position = new Vector3(Random.Range(-10f, 10f), Random.Range(10f, 0f), Random.Range(-10f, 10f));
        GameObject avatar = PhotonNetwork.Instantiate(avatarName, position, Quaternion.identity);

        var camera = GameObject.Find("MainCamera");

        camera.transform.parent = avatar.transform;
        //camera.transform.position = avatar.transform.position;

        var pos = avatar.transform.position;

        camera.transform.position = new Vector3(pos.x , pos.y+1.2f, pos.z-2.5f);


    }

   
}

```




<br>
空のオブジェクト「PhotonVoiceClient」を作り、
Pun Voice Client と　Recorderコンポーネントを追加

[![Image from Gyazo](https://i.gyazo.com/75c0f69a9294bcfc7e45310ba3459ba0.png)](https://gyazo.com/75c0f69a9294bcfc7e45310ba3459ba0)


これでうまくいきました。

あとはビルドして試してみましょう。
※WebGLには非対応

<br><br>

### 注意点
接続中にヘッドホンを外すなどマイクを別のものに変えると、
こちらの声は相手に聞こえなくなります。（相手の声は聞こえる）

コンソールに以下の警告が出ます。

```
[WARNING] [Speaker] [Avatar1(Clone)] Cannot start playback because speaker is not linked
```


この場合は一度終了して、再接続してください。


以上です。