PUN2 ストリーム同期
オブジェクトの位置や回転の同期はPhotonView
のObserved
に
PhotonTransformView
をアタッチすることで行うことができた.
他のデータを同期させたい場合は下記のように複数の方法がある.
- ストリーム同期
- イベント同期
- ルーム同期
今日はストリーム同期.
ストリーム同期 OnPhotonSerializeView()
PhotonViewに監視対象のクラスを指定することで,ストリームによる同期処理が可能. 連続的な値やオブジェクトの状態変数を同期するのに向いている.
ストリームによる同期を行うためにはIPunObservable
インタフェースで
定義されている以下のCallbackを利用する.
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
このCallbackで通信できるデータ型は
bool char short int float Quaternion Vector3 NetworkPlayer NetworkViewID
このメソッドが呼ばれるためにはPhotonView
のObserved
に
このハンドラを実装したスクリプトを追加する.
スクリプトのパターンとしてはこんな感じになるのかな.
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info) { if ( stream.IsWriting ) { // 自クライアント所有のオブジェクトの状態変更を送信 T myValiable = this.gameObject~; stream.SendNext( myValiable ); } else { // 他クライアント所有のオブジェクトの状態変更を受信 T otherValiable = (T) stream.ReceiveNext(); // 名前の変更を反映する this.gameObject.~ = otherValiable; transform.Find ("NameUI").gameObject.GetComponent<TextMesh>().text = otherName } }