.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(そして無駄なもの)になってしまいます。