【Photon】[PunRPC]がついたメソッド内で変数の値を変えても反映されない
メモ。ドキュメント読めない系プログラマ向け。
表題の件ですがRaiseEventというのを使う必要があるようです。
「あるプレイヤーが倒れたとき、他のプレイヤーに倒れたことを通知したうえで、他プレイヤーの『倒れたプレイヤー数』変数に1を足す」
という処理がしたいとする
public void OnTriggerEnter(Collider other) { //カスタムプロパティでプレイヤーのIDを管理しているとする photonView.RPC("PlayerDeath", RpcTarget.Others, ""); } int num = 0;//倒れたプレイヤー数 [PunRPC] public void PlayerDeath(string id, PhotonMessageInfo info) { num += 1; }
こんなようなこと書いたんですが、PlayerDeathメソッドを抜けるとnumが0のまんまでした。
なので以下のように変更
~~~~~~~~ public enum GameEventType : byte { PlayerDeath = 1, } ~~~~~~~~ public void OnTriggerEnter(Collider other) { var raiseEventOptions = new RaiseEventOptions { Receivers = ReceiverGroup.Others, CachingOption = EventCaching.AddToRoomCache, }; PhotonNetwork.RaiseEvent((byte)GameEventType.PlayerDeath, "message test", raiseEventOptions, SendOptions.SendReliable); } public void OnRaiseEvent(EventData photonEvent) { var type = (GameEventType)Enum.ToObject(typeof(GameEventType), photonEvent.Code); switch (type) { case GameEventType.PlayerDeath: num+= 1; break; default: return; } }
色々端折ってるので間違ってたら指摘が欲しい。
成果物のコード全体をもっと積極的に公開したいけど面倒くさいと思ってしまうので意識が低い。
下記を参考に実装しました。
Photon – PUN2 : RaiseEventのラッパー