PhotonUnityNetworkingでOnJoinedRoom()前にOnPhotonPlayerPropertiesChanged(object[])が呼ばれる?
Unity5.3.5f1 + PUN v1.69で確認。
既存ルームにJoinした際に、OnJoinedRoom()よりも先に既にルームにいるプレイヤーのOnPhotonPlayerPropertiesChanged(object)が呼ばれているっぽい?
既にルームいるプレイヤーがSetCustomProperties()を呼んでいるかどうかに関わらず呼ばれる。
それだけならまぁいいんだけど(微妙に都合悪いけど)、困ったことにこの際に渡されるPhotonPlayerの情報が正しくないっぽい。
確かにIDとかは既存プレイヤーのものなんだが、isMasterClientがtrueのはずなのにfalseになっていたりする。
OnJoinedRoom()後に既存プレイヤー側からSetCustomProperties()を呼んでみると、その際のOnPhotonPlayerPropertiesChanged(object)に渡されてくるものは正しい。
う〜ん、なんなんだろうこれ。
微妙に初期化途中のデータが流れてきているのか?
APIDoc見る限りでは、どうもそれらしい記述が見当たらんのだが。
PhotonRx使っているので、対応として下記のような感じにしてみた。
GitHub - TORISOUP/PhotonRx: PUNをUniRxで扱いやすくするライブラリ
this.OnPhotonPlayerPropertiesChangedAsObservable() .SkipUntil(this.OnJoinedRoomAsObservable()) .TakeUntil(this.OnLeftRoomAsObservable()) .Repeat() .Subscribe(x => { });
ちなみに OnPhotonCustomRoomPropertiesChanged() もちょっと怪しい気がする。