BoltとVoiceの統合

良いゲームの重要な特徴として、プレイヤー間のインタラクションがあります。これは様々な方法で行うことができます。プレイヤー同士でテキストを送ったり、キャラクターでジェスチャーをしたり、ゲーム中に会話をしたりすることで、ゲームをより楽しく流動的なものにすることができます。 Photon Voiceはシームレスな体験を生み出し、リアルタイムでのディスカッションの利便性をもたらします。

Photon Boltはゲームのネットワーク実装として使用され、プレイヤーの同期を維持することに焦点を当てています。しかし、テキストや音声ストリーミングのような機能は含まれていません。このチュートリアルでは、Photon BoltゲームをPhoton Voiceと統合し、プレイヤーがお互いに話せるようにします。

Photon Voiceの設定

まず最初に新しい空のUnityプロジェクトから始めることをお勧めします。 正常に動作することを確認したら、既存のゲームに設定してください。 以下の手順で、BoltプロジェクトにPhoton Voice SDKをセットアップします。

  1. Photon BoltをダウンロードしてUnityプロジェクトにインポートします。
  2. Asset StoreからPhoton VoiceをダウンロードしてUnityプロジェクトにインポートします。
    1. プロジェクトに既に存在するフォルダPhotonLibsPhotonRealtime のチェックを外します。
    2. こちらの指示に従って、PUNを削除します。BoltとPUNは一緒に動作するものではないので、プロジェクトから削除することをお勧めします。
    3. こちら の指示に従ってください。
    4. クリアできないエラーがある場合は、Unity を再起動する必要があるかもしれません。
    5. Photon Bolt のサンプルをインポートします。
      1. Assets/Photon/PhotonBolt/packages/に移動し、bolt_samples.unitypackageをインポートします。
      2. 利用可能なサンプルをすべてインポートするか、Voiceフォルダのみを選択します。Voiceサンプルが見つからない場合は、こちらの公開サンプルリポジトリから直接ダウンロードできます。[https://github.com/BoltEngine/Bolt-Sample/tree/master/Voice]
    6. Photon VoiceアプリケーションIDを設定します。
      1. Assets/samples/Voice/prefabs/BoltVoiceBridgeでプレハブを開き、Voice Connectionコンポーネントを見ます。
      2. App Settings セクションで、App Id Voiceフィールドを確認します。
      3. Voice App IDを入力します。
  3. Scripting Define Symbolsでフラグ BOLT_VOICE_SAMPLEを指定することで、Voiceサンプルを有効にできます。詳細は こちら を参照してください。デフォルトでは無効になっています。プロジェクトに含まれていない可能性のあるPhoton Voiceからの参照を必要とするためです。

Configure Voice Application ID
Voice Application IDを設定します。

これで、Voice用に作られたBoltサンプルを使用するために必要なものが揃いました。

トップに戻る

Voiceサンプルの使用

Bolt with Voiceのサンプルでは、以下のような機能を紹介します。

  1. シーン内のプレイヤーの位置を同期させて正確に動作させます。
  2. オーディオソースを管理して、近くのプレイヤーの声だけを聞くようにします(空間オーディオ)。
  3. 同じエリア内のプレイヤーだけがお互いに話をする「Voice Area」を管理します。

SDKに含まれていない場合は、[こちら](https://github.com/BoltEngine/Bolt-Sample/tree/master/Voice)のパブリックリポジトリからダウンロードしてください。 すべてのBoltゲームと同様、プレイヤーが使用するデータを定義する状態を作成する必要があります。 今回のサンプルでは、以下のようなシンプルな状態を使用します。

  1. Transform: プレイヤーの位置を同期させるために使用される通常のTransformプロパティです。
  2. VoicePlayerID: このプロパティはVoice Roomに接続されているVoiceクライアントの固有のIDを識別します。これは、特定のVoiceスピーカーを適切なプレイヤーにマッピングするために使用されます。

Voice Player State
Voiceプレイヤー状態

サンプルには2つのシーンが含まれています:(i) Voice_Menuは、サーバやクライアントとして起動し、ゲームシーンを自動的に読み込むシンプルなメニューシーンです。(ii)また、実際のゲームンシーンであるVoice_Meetingも読み込みます。 Meetingシーンには、先ほど説明した「Voiceエリア」と呼ばれる3つのエリアがあります。これらのエリアの主な特徴は以下の通りです。(i) タグ GameControllerがある、(ii) トリガーコライダーがある、(iii) プレイヤーが指示するグループを識別するコンポーネントBolt Voice Areaがある。

Sample Scenes
サンプルシーン

統合の重要な要素として、 BoltVoiceBridge クラスがあります。これはPhoton Voiceとクラウドサービスとの接続を管理するだけでなく、プレイヤーが使用するVoiceスピーカーのインスタンスを作成して保存します。 コードがどのように動作するかについては、ソースコードを参照してください。要約すると、このクラスはPhoton Voice SDKにあるオリジナルのConnectAndJoinクラスと非常によく似た動作をします。しかし、このクラスはBoltのイベントやプロパティをフックするので、プレイヤーは自動的にVoiceルームを作成/参加し、他のプレイヤーとオーディオを共有し始めます。

プレイヤーが Voice_Meeting のシーンに入ると、自動的にVoiceルームに接続され、特定のVoice IDを受け取ります。 このVoiceルームは、_voiceで追加されたBoltセッションの名前を元にした名前で作成されます。これは不可視化されており、この名前を構築できるプレイヤーのみが接続できるようになっています。 リモートプレイヤーが検出されると、BoltVoiceBridgeはそのプレイヤー用の新しいSpeakerを作成して内部レジストリに保存し、BoltVoiceBridge.CustomBoltSpeakerFactoryを確認します。 スピーカーのレジストリは、Voice Player IDとスピーカーの間のマッピングであり、特定の参照が別のリモートプレーヤーに属していることを識別するために使用されます。

各プレイヤーがBoltゲームセッションに参加し、Voiceルームに接続すると、Boltプレイヤーの状態で自分のVoice Player IDの更新が始まります。 サンプルでは、プレイヤーはクラス BoltVoicePlayerController によって制御されています。Boltに慣れている人は、これがシンプルなコントローラの実装であることに気づくでしょう。 各プレイヤーはローカルエンティティのプレイヤーを所有しているので、問題なく状態を変更することができます。 正しいスピーカーと正しいプレいヤーを親にするために、先ほどの VoicePlayerID プロパティを使用します。これは、そのプレイヤーのIDを全てのピアで共有し、その情報を元に、BoltVoiceBridgeで作成したレジストリからSpeakerのリファレンスを収集します。 これはPlayer ControllerクラスのBoltVoicePlayerController.SetupSpeakerメソッドで確認することができます。

Voiceグループは、プレイヤーがいる場所、具体的にはプレイヤーが出入りする場所に基づいて管理されます。 プレイヤーコントローラのTriggerコールバックを購読しているので、シーン上の「Voiceエリア」に入ったことを検出し、BoltVoiceAreaコンポーネントからグループIDを取得し、BoltVoiceBridgeに送信することで、Interest Group (詳細はこちらと[こちら(https://doc.photonengine.com/en-us/realtime/current/gameplay/interestgroups)を参照)を変更することができるようになっています。

統合で使用するスピーカープレファブを変更したい場合は、Assets/samples/Voice/Prefabs/BoltSpatialSpeakerの設定を変更してください。 デフォルトでは3Dサウンドとして動作するように設定されているので、近くにいるプレイヤーだけがお互いの声を聞くことができますが、必要に応じて簡単に変更することができます。

これで、このサンプルのすべての可動部分についての説明を終わります。 両方のシーンをBuild Settingsに含め、ゲームのスタンドアロン実行ファイルをビルドします。 BoltとVoiceをそれぞれのアプリケーションIDで正しく設定していれば、Boltサーバーとのセッションを作成し、クライアントとして入力することができます。 両方がゲームに参加すると、Voiceクライアントとしても接続され、お互いの声を聞くことができるようになります。 「Voiceエリア」に入ってみると、同じエリアにいるプレイヤーだけが、そのエリア内の他のプレイヤーからの音声を受信できます。 また、「外」のエリアもグループとして扱われるので、そこにいる人は「Voiceエリア」の中にいない他のプレイヤーの声を聞くことができます。

Bolt & Voice gameplayer
Bolt&Voiceのgameplayer

ドキュメントのトップへ戻る