適用於 target 和 origin 的 active 控制策略
透過以下內容,您將了解 target 和 origin 下物件的預設顯示和隱藏策略,以及如何根據需要進行調整。
開始之前
Active 控制和控制策略類型
session 運行過程中,target 和 origin 會經歷跟蹤和遺失等狀態變化。透過 active 控制策略,可以自動管理 target 和 origin 下物件的顯示和隱藏行為。
在 Unity 中,ActiveController 元件負責自動管理 target 和 orign 物件的 GameObject.activeSelf 狀態,以便在 target 被跟蹤或運動跟蹤開始跟蹤後顯示內容,在 target 遺失或運動跟蹤成功初始化之前隱藏內容。
ActiveController 提供了兩種不同的 active 控制策略:
- ActiveWhileTracked:被跟蹤時,GameObject 會被啟用(GameObject.activeSelf 設置為
true);跟蹤遺失時,GameObject 會被停用(GameObject.activeSelf 設置為false)。 - ActiveAfterFirstTracked:在第一次跟蹤之前,GameObject 會被停用(GameObject.activeSelf 設置為
false);一旦被成功跟蹤,GameObject 會被持續啟用(GameObject.activeSelf 設置為true)。
預設情況下,TargetController 使用 ActiveWhileTracked 策略,這意味著當 target 被跟蹤時,target 以及其下的內容會被啟用,而當跟蹤遺失時,target 以及其內容會被停用。
預設情況下,XROriginChildController 使用 ActiveAfterFirstTracked 策略,這意味著在運動跟蹤成功初始化之前,origin 以及其下的內容會被停用,而一旦運動跟蹤成功初始化,origin 以及其下的內容會被持續啟用。
選擇不同的 active 控制策略
開啟 Inspector 面板,在 Strategy 下拉式功能表中選擇 Input

然後在右側選擇所需的 active 控制策略來覆蓋預設策略。

在腳本中,可以透過 OverrideStrategy 屬性來覆蓋預設的 active 控制策略。
比如,下面的程式碼展示了如何將 target 的 active 控制策略設置為 ActiveAfterFirstTracked:
target.ActiveController.OverrideStrategy = ActiveController.Strategy.ActiveAfterFirstTracked;
對 active 策略的修改會即時生效,並根據當前的跟蹤狀態更新 GameObject.activeSelf。
關閉 active 控制
如果需要完全停用 active 控制,比如需要根據需要進行控制,可以透過停用 ActiveController 元件來關閉 active 控制。

在腳本中,可以透過設置 ActiveController.enabled 屬性來關閉 active 控制。
target.ActiveController.enabled = false;
ActiveController.enabled 屬性的修改會即時生效,並且不會再根據跟蹤狀態更新 GameObject.activeSelf。如果再次啟用 ActiveController 元件,GameObject.activeSelf 會根據當前的跟蹤狀態進行更新。