読者です 読者をやめる 読者になる 読者になる

unity study

Unityでサクッとモックを作れるようになることを目指して、基本的なテクニックを抑えていく過程を残すブログのつもりだったけど、今はただ自分のトラブルシューティングメモになってるブログ

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() もちょっと怪しい気がする。