デニッキ

XRエンジニア🔰の備忘録・日記です.

シグネチャが合っていて[PunRPC]を付けているのに「PhotonView with id xxxx has no (non-static) method marked "Hogehoge" with the [punrpc](c#) or @punrpc(js) property! args: T 」というエラーが生じる場合の対処法

PhotonView with id xxxx has no (non-static) method marked "Hogehoge" 
with the [punrpc](c#) or @punrpc(js) property! args: T

このエラーはシグネチャ(メソッド名や引数とか)や[PunRPC]をつけていないと起きる.
これら以外に発生する原因がある.

異なるレポジトリ間でPhotonのRPCを用いて同期処理を行う場合で,生じる時がある.
この場合,PhotonServerSettingsのRPCs/List CRCが合致していない可能性があります.

f:id:xrdnk:20200709220341p:plain

doc.photonengine.com

RPC名のショートカット ネットワーク間での送信をするのに文字列は適したものではないので、PUNでは文字列を短くする裏技を使っています。 PUNはエディタ内のRPCを検出してリストをコンパイルします。 それぞれのメソッドの名前は、そのリストを経由してIDを取得し、RPCを名前で呼び出すと、PUNはただIDだけを送信します。 このショートカットにより、ゲームの異なるビルドはRPCに同じIDを使用しないことがあります。 これが問題になる場合は、ショートカットを無効にしてください。 ただし、同じビルドのクライアントが一致する場合は、問題にはなりません。 RPCのリストはPhotonServerSettingsを介して保管され、管理されます。 RPC呼び出しがプロジェクトの異なるビルドでうまくいかなければ、このリストを確認してください。 Get HashCode ボタンがハッシュコードを計算します。これはプロジェクトフォルダ間の比較をするのに便利です。 必要であれば、リストをクリアして(Clear RPCs ボタンをクリック)、Refresh RPC List ボタンをクリックして手動で更新をかけることもできます。

なかなか原因がわからなかったけれど,公式マニュアルにしっかり書いてあった.