PUN2 イベント同期

今日はイベント同期.

RPC (Remote Procedure Call)

サーバーを介して他クライアントのメソッドを呼び出すことも可能.
一般的にRPCと呼ばれる同期方法を使う.

イベントなどの離散的な値を同期させるのにRPCが向いている.
以下のメソッドを使う.

PhotonVIew.Get(PhotonViewのインスタンス).RPC("イベントハンドラ名", RpcTarget.All, args)

引数のRpcTargetは列挙型で,RPCの送信相手とそのバッファリング方法を指定できる.
Bufferedを指定→後からルームに入ってきたプレイヤーにも最新の状態での同期が可能になる.
ViaServerを指定→イベントの発火順序が保証される.

enum RpcTarget {
  All, Others, MasterClient, 
  AllBuffered, OthersBuffered, 
  AllViaServer, AllBufferedViaServer
}

同期できる型は以下.

byte, byte[]
int, int[]
float, float[]
string, string[]
Vector3, Quaternion

サンプルプログラムはこんな感じ.

    // RPCイベント同期 
    IEnumerator メソッド名(){

        while(true){

           //定期的に変更する場合はコルーチンを利用

            PhotonView.Get(this).RPC( "イベントハンドラ名", RpcTarget.All, args );

            yield return new WaitForSeconds( 2f );
        }
    }

    // 受信ハンドラ側に[RPC]attributeを付加する
    [PunRPC]
    void イベントハンドラ名( T args){

    }