HoloLens-Unity 学习笔记2 —— 存储WorldAnchor(译)

本文由@Solo君翻译整理!欢迎加入Hololens-AR开发者专属群 418092645
Namespace: UnityEngine.WSA.VR.Persistence
Class: WorldAnchorStore
WorldAnchorStore是创建全息体验的关键,能使全息物体维持在真实世界的特定位置。这个功能使用户能够将个别全息物体或者工作区放置在他们想放置的位置,并在之后使用app的时候能在期望的位置找到他们。
如何在跨会话中保持全息物体
WorldAnchorStore允许你在跨会话中保持世界锚点的位置。为了在跨会话中保持全息物体,需要使用特定的世界锚持续追踪GameObjects。通常是以世界锚GameObject作为根,并在其相对位置上创建子类全息物体。
 
从之前的会话中读取全息物体:
  1. 获取WorldAnchorStore
  2. 从提供世界锚id的相关世界锚读取app数据
  3. 通过id读取世界锚
 
为以后的会话存储全息物体
  1. 获取WorldAnchorStore
  2. 使用特定的id存储世界锚
  3. 根据世界锚,通过此id存储app数据
获取WorldAnchorStore
我们想要维持WorldAnchorStore的引用,我们需要在运行前进行一些操作。这是一个异步调用,我们在启动的时候同时调用
WorldAnchorStore.GetAsync(StoreLoaded);
 
WorldAnchorStore完成读取,会调用StoreLoaded:
private void StoreLoaded(WorldAnchorStore store)
{
       this.store = store;
}

现在已经有了一个WorldAnchorStore的引用,我们可以用来存储和读取特定的世界锚。
保存WorldAnchor
保存WorldAnchor只需要简单对其命名和传到之前获取到的WorldAnchorStore。
注意: 使用重复的命名对WorldAnchor进行存储会失败(store.Save会返回false)。需要删除之前的WorldAnchor再进行存储 :

private void SaveGame()

{
       // 使用WorldAnchorStore对全息物体的进行存储
       if (!this.savedRoot) // 根物体只存储一次

{
this.savedRoot = this.store.Save(“rootGameObject”, anchor);
Assert(this.savedRoot);
}
}

读取WorldAnchor
读取WorldAnchor:
private void LoadGame()

{
       // 通过WorldAnchorStore读取全息物体

this.savedRoot = this.store.Load(“rootGameObject”, rootGameObject);
if (!this.savedRoot)

       {
              // 没有保存的根物体。需要重新放置物体或重新开始

}

}
此外,可以使用store.Delete()来删除之前存储的anchor,或使用store.Clear()删除全部保存的数据。
 
枚举已存在的Anchor
To discover previously stored anchors, call GetAllIds.
通过GetAllIds获取已经存储的anchor
string[] ids = this.store.GetAllIds();
for (int index = 0; index < ids.Length; index++)
{
Debug.Log(ids[index]);
}
 

未经允许不得转载:Mr.开发者 » HoloLens-Unity 学习笔记2 —— 存储WorldAnchor(译)

赞 (1)
分享到:更多 ()