target と origin に適用される active control 戦略
以下の内容では、target と origin 配下のオブジェクトのデフォルトの表示/非表示戦略、および必要に応じて調整する方法について説明します。
開始する前に
Active control と制御戦略の種類
session 実行中、target と origin は tracking や lost などの状態変化を経ます。active control 戦略により、target と origin 配下のオブジェクトの表示/非表示動作を自動的に管理できます。
Unity では、ActiveController コンポーネントが target と orign オブジェクトの GameObject.activeSelf 状態を自動管理します。これにより、target が tracking された後、または motion tracking が tracking を開始した後にコンテンツを表示し、target が lost したとき、または motion tracking が正常に初期化される前にコンテンツを非表示にします。
ActiveController は 2 種類の active control 戦略を提供します。
- ActiveWhileTracked: tracking されているとき、GameObject は有効化されます(GameObject.activeSelf は
trueに設定)。tracking が lost すると、GameObject は無効化されます(GameObject.activeSelf はfalseに設定)。 - ActiveAfterFirstTracked: 初回 tracking 前、GameObject は無効化されます(GameObject.activeSelf は
falseに設定)。一度正常に tracking されると、GameObject は継続して有効化されます(GameObject.activeSelf はtrueに設定)。
デフォルトでは、TargetController は ActiveWhileTracked 戦略を使用します。つまり、target が tracking されているとき、target とその配下のコンテンツは有効化され、tracking が lost したとき、target とそのコンテンツは無効化されます。
デフォルトでは、XROriginChildController は ActiveAfterFirstTracked 戦略を使用します。つまり、motion tracking が正常に初期化される前、origin とその配下のコンテンツは無効化され、motion tracking が正常に初期化されると、origin とその配下のコンテンツは継続して有効化されます。
別の active control 戦略を選択する
Inspector パネルを開き、Strategy ドロップダウンメニューで Input を選択します。

次に右側で必要な active control 戦略を選択し、デフォルト戦略を上書きします。

スクリプトでは、OverrideStrategy プロパティを使用して、デフォルトの active control 戦略を上書きできます。
たとえば、次のコードは target の active control 戦略を ActiveAfterFirstTracked に設定する方法を示しています。
target.ActiveController.OverrideStrategy = ActiveController.Strategy.ActiveAfterFirstTracked;
active 戦略の変更は即時に反映され、現在の tracking 状態に基づいて GameObject.activeSelf が更新されます。
Active control を無効化する
必要に応じて制御するなど、active control を完全に無効化したい場合は、ActiveController コンポーネントを無効化することで active control をオフにできます。

スクリプトでは、ActiveController.enabled プロパティを設定することで active control をオフにできます。
target.ActiveController.enabled = false;
ActiveController.enabled プロパティの変更は即時に反映され、GameObject.activeSelf は tracking 状態に基づいて更新されなくなります。ActiveController コンポーネントを再度有効化すると、GameObject.activeSelf は現在の tracking 状態に基づいて更新されます。