.Netコールバック
C# SDKはクラスで実装可能なコールバックを提供しています:
Photon Realtime C# SDKコールバックインターフェース:
IConnectionCallbacks: 接続関連のコールバック。IInRoomCallbacks: ルーム内で発生するコールバック。ILobbyCallbacks: ロビー関連のコールバック。IMatchmakingCallbacks: マッチメイキング関連のコールバック。IOnEventCallback: 受信したイベントのシングルコールバック。 C#イベントLoadBalancingClient.EventReceivedと同等です。IWebRpcCallback: 受信中のWebRPCオペレーション応答のシングルコールバック。IOnErrorInfoCallback: ErrorInfoイベントを受信するシングルコールバック。
PUN 2用のコールバックインターフェース:
Photon Realtime C#のほかに、PUN2には特別なインターフェースがあります。
ここでは「スコープ」と処理方法に基づいて2つのグループにわけてご紹介します。:
一般的なコールバックインターフェース:
IPunInstantiateMagicCallback:インスタンス化したPUNプレハブのシングルコールバック。IPunOwnershipCallbacks: PUNオーナーシップ移行コールバック。PhotonViewコールバックインターフェース:
IPunObservable: PhotonViewシリアライゼーションコールバック。IOnPhotonViewPreNetDestroy: PhotonViewネットワークオブジェクトを破壊する前の OnPreNetDestroy()コールバック。IOnPhotonViewControllerChange: コントローラーが変わった場合のOnControllerChange()コールバック。IOnPhotonViewOwnerChange: オーナーが変わった場合のOnOwnerChange() コールバック。
IPunInstantiateMagicCallbackを除く、Photon Realtimeまたは一般的なPUN 2コールバックインターフェースを実装するすべてのクラスを登録・登録解除する必要があります。
PhotonNetwork.AddCallbackTarget(this)とPhotonNetwork.RemoveCallbackTarget(this)を呼び出してください。
IPunObservableを除くPhotonViewコールバックインターフェースを実装しているすべてのクラスは登録・登録解除する必要があります。
photonView.AddCallbackTarget(this)と photonView.RemoveCallbackTarget(this)を呼び出してください。
IPunObservableインターフェースはインスペクターを通して処理され、Add/Remove(追加・削除)システムの一部ではありません。
例えばUnityでは、MonoBehaviourのOnEnable()とOnDisable()を使用できました。
これらのインターフェースの実装は任意ですが、コードの可読性と管理のしやすさを上げることから推奨しています。
また、ロジックの実行タイミングが的確に提供されるのでPhotonのフローとステートの管理がしやすくなります。
他の代替案では、ステートフラグフィールドの使用やポーリングでクライアントのネットワーク状況を確認したりすべてのネットワーククライアントの変更や受信したイベント、操作方法へのサブスクライビングが必要な場合があります。
これには、Photonの内部や仮想レベルについての精通した知識が必要とされますが、これに頭を悩ませることなく、ゲームに集中することもできます。
MonoBehaviour methods).
コールバックシステムを実装するよりもインターフェースを選んだほうがいい理由:
- 確実にコールバックメソッドのシグネチャに注意が払われるようになる。これはインターフェースの実装時コンパイラによって保証される。
- 論理的に関連のあるコールバックをシングルクラスへグループ化する
- コールバックを備える他のメソッドと比べて、不要なデータのオーバーヘッドが少なくメモリリークを防ぐことができる
If you happen to have a method that has the exact signature as one of the callbacks' interfaces' methods or you wish to hide the callbacks methods (unless a cast is made) you could choose explicit interface implementation.
MonoBehaviourPunCallbacksクラスからの継承が、PUN2コールバックを実装するのに最も簡単で迅速な方法です :
- 必要なコールバックだけを選択して上書きできる
MonoBehaviourです。 - 次のほとんどを実装するので、コールバックのインターフェースを覚える必要がありません。:
IConnectionCallbacks,IMatchmakingCallbacks、IInRoomCallbacks、ILobbyCallbacks、IWebRpcCallback - コールバックの登録、登録解除を自動で処理します。 (
OnEnable()とOnDisable()のそれぞれにおいて) - 同じGameObjectに後者が添付されている場合、PhotonViewをプロパティで簡単に表示させる
MonoBehaviourPunを拡張します。
ただし、以下のことにも気をつけなければいけません:
- ほとんどのコールバックインターフェースを実装しますが、すべてではありません。
IOnEventCallbackやPUN固有のコールバックは実装していません。
PUN2のユーティリティインターフェースもまた、IPunTurnManagerCallbacksなどを実装していません。 MonoBehaviourPunCallbacksを拡張する場合、OnEnable()andOnDisable()を上書きする場合は、忘れずに基底クラスメソッドを呼び出してください。- PhotonViewと同じようにGameObjectにコンポーネントが添付されていないと、
MonoBehaviourPunCallbacks.photonViewはnull(そして無駄なもの)になってしまいます。