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 } }