ARDKイベントのサブスクライブ
体験に関連したARイベントやネットワークイベントが発生した際に通知を受け取る。
概要
ARDKのコアクラス( ARSession 、MultipeerNetworking、ARNetworking)ではいずれも、特定のARイベントまたはネットワークイベントが発生したときに他のシステムにシグナルを送信するためにデリゲートモデルが使用されます。この記事では、これらのイベントにサブスクライブする方法と、一般的な使用パターンを説明します。
同期してサブスクライブする
ARSession 、MultipeerNetworking、ARNetworkingのいずれかのクラスのインスタンスを作成すると、そのインスタンスですぐにイベントをサブスクライブすることができます。
void InitializeARSession() { var arSession = ARSessionFactory.Create(); arSession.Ran += OnSessionRan; } void OnSessionRan(ARSessionRanArgs args) { // Do something }
クラスファクトリを使用してインスタンスを構築し、そのクラスのイベントをサブスクライブするフローは、MultipeerNetworkingやARNetworkingのシステムにも同様に適用されます。
非同期でサブスクライブする
ARDKのコアオブジェクトは1つのクラスで作成して管理されますが、そのオブジェクトへの参照は別のクラスで必要になることがあります。参照渡し(そしてそれによって生じる可能性のある2つのクラス間の不要な依存関係)を防ぐために、インスタンス構築時にファクトリで発生するイベントをサブスクライブできます。
void ListenForARSession() { ARSessionFactory.SessionInitialized += OnSessionInitialized; } void OnSessionInitialized(AnyARSessionInitializedArgs args) { args.Session.Ran += OnSessionRan; }
上記のスニペットの2つや、IMultipeerNetworking.Connectedのようなイベントでは、イベントがすでに「発生した」後にサブスクライブするデリゲートが呼び出されます。たとえば、ARSessionがすでにに初期化されているにもかかわらず ListenForARSession
が呼び出されると、 OnSessionInitialized
が直ちに呼び出されます。
サブスクライブを解除する
null参照エラーやメモリーリークを防ぐために、パブリッシャーオブジェクト(例: ARSession)がサブスクライバーより長く残る場合、デリゲートのサブスクライブは必ず解除してください。シーンの切り替えやトップレベルの新しいARDKオブジェクトの作成を予定している場合は、無名メソッドでサブスクライブせず、破棄時に適切にサブスクライブを解除してください。