.Netコールバック

IPunInstantiateMagicCallbackを除く全てのインターフェースコールバックは登録および登録解除されます。 PhotonNetwork.AddCallbackTarget(this)PhotonNetwork.RemoveCallbackTarget(this)を呼び出してください。

例えばUnityでは、 MonoBehaviour's OnEnable()OnDisable()を使用できます。

MonoBehaviourPunCallbacksを拡張する場合はベースクラスメソッドを、オーバーライドする場合はOnEnabled()OnDisable()を呼び出すようにしてください。

PUNとPhoton RealtimeのC# SDKは、クラスで実装可能な一連のコールバックインターフェースを提供しています:

  • IConnectionCallbacks: 接続関連のコールバック。
  • IInRoomCallbacks: ルーム内で発生するコールバック。
  • ILobbyCallbacks: ロビー関連のコールバック。
  • IMatchmakingCallbacks: マッチメイキング関連のコールバック。
  • IOnEventCallback: 受信したイベントのシングルコールバック。 C#イベントLoadBalancingClient.EventReceivedと同等です。
  • IWebRpcCallback: 受信中のWebRPCオペレーション応答のシングルコールバック。
  • IPunInstantiateMagicCallback:インスタンス化したPUNプレハブのシングルコールバック。
  • IPunObservable: PhotonViewシリアライゼーションコールバック。
  • IPunOwnershipCallbacks: PUNオーナーシップ移行コールバック。

クラスごとに1つまたは複数のインターフェースを実装できます。 また、複数のクラスに同一のインターフェースを実装することもできます。 デメリットとしてはこれらのインターフェースを実装するクラスが長くなってしまったり、必要ないメソッドを含んでしまう可能性があることです。

IPunInstantiateMagicCallbackを除くすべてのコールバックは登録・登録解除する必要があります。 PhotonNetwork.AddCallbackTarget(this)PhotonNetwork.RemoveCallbackTarget(this)を呼び出してください。

例えばUnityでは、MonoBehaviourOnEnable()OnDisable()を使用できました。

これらのインターフェースの実装は任意ですが、コードの可読性と管理のしやすさを上げることから推奨しています。 また、ロジックの実行タイミングが的確に提供されるのでPhotonのフローとステートの管理がしやすくなります。 他の代替案では、ステートフラグフィールドの使用やポーリングでクライアントのネットワーク状況を確認したりすべてのネットワーククライアントの変更や受信したイベント、操作方法へのサブスクライビングが必要な場合があります。 これには、Photonの内部や仮想レベルについての精通した知識が必要とされますが、これに頭を悩ませることなく、ゲームに集中することもできます。

コールバックシステムを実装するよりもインターフェースを選んだほうがいい理由:

  • 確実にコールバックメソッドのシグネチャに注意が払われるようになる。これはインターフェースの実装時コンパイラによって保証される。
  • 論理的に関連のあるコールバックをシングルクラスへグループ化する
  • コールバックを備える他のメソッドと比べて、不要なデータのオーバーヘッドが少なくメモリリークを防ぐことができる

MonoBehaviourPunCallbacksクラスからの継承が、PUN2コールバックを実装するのに最も簡単で迅速な方法です :

  • 必要なコールバックだけを選択して上書きできるMonoBehaviourです。
  • 次のほとんどを実装するので、コールバックのインターフェースを覚える必要がありません。: IConnectionCallbacks, IMatchmakingCallbacksIInRoomCallbacksILobbyCallbacksIWebRpcCallback
  • コールバックの登録、登録解除を自動で処理します。 (OnEnable()OnDisable()のそれぞれにおいて)
  • 同じGameObjectに後者が添付されている場合、PhotonViewをプロパティで簡単に表示させるMonoBehaviourPunを拡張します。

ただし、以下のことにも気をつけなければいけません:

  • ほとんどのコールバックインターフェースを実装しますが、すべてではありません。 IOnEventCallbackIPunInstantiateMagicCallbackIPunObservableIPunOwnershipCallbacksは実装しません。 PUN2のユーティリティインターフェースもまた、IPunTurnManagerCallbacksなどを実装していません。
  • MonoBehaviourPunCallbacksを拡張する場合、OnEnable() and OnDisable()を上書きする場合は、忘れずに基底クラスメソッドを呼び出してください。
  • PhotonViewと同じようにGameObjectにコンポーネントが添付されていないと、MonoBehaviourPunCallbacks.photonViewはnull(そして無駄なもの)になってしまいます。

ドキュメントのトップへ戻る