World Anchor空間錨提供了一種能夠將物體保留在特定位置和旋轉狀態上的方法。這保證了全息對象的穩定性,同時提供了後續在真實世界中保持全息對象位置的能力。簡單地說,你可以為全息物體來添加空間錨點,這樣就能在後續步驟中將全息物體准確恢復到它原來的位置。
WorldAnchor anchor = gameObject.AddComponent<WorldAnchor>();
如果你不再想將GameObject固定在特定位置,同時在場景中也不想移動它,,那麼可以調用Destroy()方法來銷毀WorldAnchor組件,如下: 如果你想要立刻在場景中移動對象,那麼需要調用DestroyImmediate()來銷毀空間錨組件,如下: 當全息對象已附加空間錨組件後,它不能被移動。如果你需要一定全息對象的話,那麼你必須這樣做: 在某個時間點,空間錨可能不能夠在世界中被定位到。如果這種情況發生,Unity將不能更新錨定對象的位置。在應用運行時,這也肯能會發生變化。不能夠及時處理可定位能力的變化,可能會導致對象不會出現在准確的位置上。 為了追蹤可定位能力的變化,需要采取如下做法: 代碼如下: 代碼如下: 有時空間錨能夠立刻被定位到。這時候,給對象添加空間錨後,空間錨組件的isLocated屬性值將會被設為true,這是OnTrackingChanged事件將不會被觸發。因此,在添加空間錨組件後,推薦立刻使用初始的isLocated狀態去調用OnTrackingChanged事件,如下: Removing a World Anchor 移除空間錨
Destroy(gameObject.GetComponent<WorldAnchor>());
DestroyImmediate(gameObject.GetComponent<WorldAnchor>());
Moving a World Anchored GameObject 移動錨定的全息對象
DestroyImmediate(gameObject.GetComponent<WorldAnchor>());
gameObject.transform.position = new Vector3(0, 0, 2);
WorldAnchor anchor = gameObject.AddComponent<WorldAnchor>();
Handling Locatability Changes 處理可定位能力的變化
訂閱事件
anchor.OnTrackingChanged += Anchor_OnTrackingChanged;
處理OnTrackingChanged事件
private void Anchor_OnTrackingChanged(WorldAnchor self, bool located)
{
// 根據定位狀態簡單的顯示或者隱藏對象
self.gameObject.SetActiveRecursively(located);
}
設定明確的初始狀態
Anchor_OnTrackingChanged(anchor, anchor.isLocated);