Photon Unity Networking (PUN)のチュートリアルをやってみる (4) RPCを送信する

Photon Unity Networking (PUN)のチュートリアルをやってみる (4) RPCを送信する

CSS

今回はPhotonを使ったメッセージの送受信をやってみます。

チュートリアルは以下のページを参考にしています。

マルコ・ポーロ・チュートリアル

スポンサーリンク
GoogleAdSence レクタングル(大)

叫び声を設定する

 チュートリアルの流れにそって、RPCを使って表示されてるモンスターに鳴き声を上げさせるようにしてみます。

 まず再生するための音源を適当に用意します。Unityで使える音源なら何でもな感じで。チュートリアルのほうでは、自動生成するサイトへのリンクがあってそちらでもよいですが、わかりやすくフリーで用意されてる音源を探してきました。

 こちらの「ドラゴン・鳴き声02」と「ドラゴン・咆吼01」をサンプルとして使います。ダウンロードして、MarcoPoloフォルダにドラッグ&ドロップしておいてください。

RPCを受信するメソッドを作る

 MarcoPoroフォルダに、「AudioRpc」というスクリプトを作り、以下のように入力します。

 チュートリアルではthis.audioを参照しているのですが、今のUnityではGetCompornentで取得するようになっているみたいです。

あと属性も「RPC」ではなく「PunPRC」にしています。UnityのRPCは廃止されていくみたい。

 これによって、RPCでMarcoメソッドが呼ばれたときにはmarcoのオーディオが、Poloメソッドが呼ばれたときにはpoloのオーディオが再生されます。

 次にこのスクリプトをmonsterprefabに追加して、「Marco」のオーディオクリップに「ドラゴン・鳴き声02」を、「Polo」のオーディオクリップに「ドラゴン・咆吼01」をドラッグ&ドロップ。

 またmonosterprefabにAudioSourceコンポーネントを追加します。これが無いと、

MissingComponentException: There is no ‘AudioSource’ attached to the “monsterprefab(Clone)” game object, but a script is trying to access it.
You probably need to add a AudioSource to the game object “monsterprefab(Clone)”. Or your script needs to check if the component is attached before using it.

が発生します。

 これで再生の準備は整いました。

鳴き声を上げさせるボタンを付ける

 上で設定した鳴き声をモンスターに上げさせるためのボタンをRandomMatchmakerに追加します。

 まずRPCを送信するためにはPhotonViewのインスタンスが必要なので、それを保持するメンバ変数myPhotonViewを追加。

 で、JoinしたときにPhotonViewを取得します。

 myPhotonViewへPhotonViewを保存します。

 最後に、これを通してRPCを送信するためのGUIボタンを追加します。

OnGUIを上のように変更。

 チュートリアルページではPeerState.Joinedを参照していますが、これがPhotonの1.67ではあったけど1.77では無くなっているみたいなので、ClientState.Joinedを使用しています。

 あとは実行してみると、ボタンが左上に置いてあるので、

 押してみると、ログインしている全端末から音が鳴ります!

フォアグラウンドにあるアプリでのみ有効にする

 例えば実行ファイルとエディタなど、同じPCで2つ以上のクライアントを実行させてテストしている場合、このボタンを押すと両方のアプリから音が鳴ってしまいます。

 そこで、フォアグラウンドでいるときのみ、音を鳴らすようにします。

 AudioRpcのコードに、アプリケーションのフォーカスで自身を有効/無効にするコードを追加して、

MarcoとPoloで、enabledを見るようにします。

 一つのマシンでやってるとわかりづらいかもしれませんが…Consoleに「Marco」という表示が出たり出なかったりになるので、そこで察する感じでひとつ。