.Netコールバック
IPunInstantiateMagicCallback
を除く全てのインターフェースコールバックは登録および登録解除されます。
全てのインターフェースコールバックは登録および登録解除されます。
LoadBalancingClient.AddCallbackTarget(this)
とLoadBalancingClient.RemoveCallbackTarget(this)
を呼び出してください。
例えばUnityでは、 MonoBehaviour
's OnEnable()
とOnDisable()
を使用できます。
PUNとPhoton RealtimeのC# SDKは、クラスで実装可能な一連のコールバックインターフェースを提供しています:
IConnectionCallbacks
: 接続関連のコールバック。IInRoomCallbacks
: ルーム内で発生するコールバック。ILobbyCallbacks
: ロビー関連のコールバック。IMatchmakingCallbacks
: マッチメイキング関連のコールバック。IOnEventCallback
: 受信したイベントのシングルコールバック。 C#イベントLoadBalancingClient.EventReceived
と同等です。IWebRpcCallback
: 受信中のWebRPCオペレーション応答のシングルコールバック。
クラスごとに1つまたは複数のインターフェースを実装できます。 また、複数のクラスに同一のインターフェースを実装することもできます。 デメリットとしてはこれらのインターフェースを実装するクラスが長くなってしまったり、必要ないメソッドを含んでしまう可能性があることです。
コールバックインターフェースを実装しているすべてのクラスは登録・登録解除する必要があります。
LoadBalancingClient.AddCallbackTarget(this)
とLoadBalancingClient.RemoveCallbackTarget(this)
を呼び出してください。
例えばUnityでは、MonoBehaviour
のOnEnable()
とOnDisable()
を使用できました。
これらのインターフェースの実装は任意ですが、コードの可読性と管理のしやすさを上げることから推奨しています。 また、ロジックの実行タイミングが的確に提供されるのでPhotonのフローとステートの管理がしやすくなります。 他の代替案では、ステートフラグフィールドの使用やポーリングでクライアントのネットワーク状況を確認したりすべてのネットワーククライアントの変更や受信したイベント、操作方法へのサブスクライビングが必要な場合があります。 これには、Photonの内部や仮想レベルについての精通した知識が必要とされますが、これに頭を悩ませることなく、ゲームに集中することもできます。
コールバックシステムを実装するよりもインターフェースを選んだほうがいい理由:
- 確実にコールバックメソッドのシグネチャに注意が払われるようになる。これはインターフェースの実装時コンパイラによって保証される。
- 論理的に関連のあるコールバックをシングルクラスへグループ化する
- コールバックを備える他のメソッドと比べて、不要なデータのオーバーヘッドが少なくメモリリークを防ぐことができる