Targetとoriginのためのactive-control戦略
以下の内容を通じて、targetとorigin下のオブジェクトのデフォルトの表示・非表示戦略と、必要に応じた調整方法を理解できます。
開始前に
active-controlと戦略の種類
session実行中、targetとoriginは追跡やロストなどの状態変化を経験します。active-control戦略により、targetとorigin下のオブジェクトの表示・非表示動作を自動管理できます。
Unityでは、ActiveControllerコンポーネントがtargetとoriginオブジェクトのGameObject.activeSelf状態を自動管理し、targetが追跡された時やモーショントラッキングが追跡を開始した後にコンテンツを表示し、targetがロストした時やモーショントラッキングが正常に初期化される前にコンテンツを非表示にします。
ActiveControllerは2種類のactive-control戦略を提供します:
- ActiveWhileTracked:追跡中はGameObjectがアクティブ化(GameObject.activeSelfが
trueに設定)。追跡ロスト時は非アクティブ化(GameObject.activeSelfがfalseに設定)。 - ActiveAfterFirstTracked:初回追跡前はGameObjectが非アクティブ(GameObject.activeSelfが
false)。一度追跡成功すると持続的にアクティブ状態(GameObject.activeSelfがtrue)を維持。
デフォルトでTargetControllerはActiveWhileTracked戦略を使用します。これはtargetが追跡されるとtargetとその下のコンテンツがアクティブ化され、追跡ロスト時には非アクティブ化されることを意味します。
デフォルトでXROriginChildControllerはActiveAfterFirstTracked戦略を使用します。これはモーショントラッキングが正常に初期化されるまでoriginとその下のコンテンツが非アクティブ状態となり、初期化成功後は持続的にアクティブ状態を維持することを意味します。
異なるactive-control戦略の選択
Inspectorパネルを開き、StrategyドロップダウンメニューからInputを選択

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

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

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