Unity의 지속성Persistence in Unity

네임 스페이스: UNITYENGINE. XRNamespace: UnityEngine.XR.WSA.Persistence
클래스: WorldAnchorStoreClass: WorldAnchorStore

WorldAnchorStore는 응용 프로그램의 여러 인스턴스에서 holograms 특정 실제 위치에 유지 되는 holographic 환경을 만드는 핵심입니다.The WorldAnchorStore is the key to creating holographic experiences where holograms stay in specific real world positions across instances of the application. 사용자는 언제 든 지 개별 holograms을 고정 하 고, 나중에 앱의 여러 사용에 대 한 동일한 지점에서 찾을 수 있습니다.Users can then pin individual holograms wherever they want, and find them later in the same spot over many uses of your app.

세션 간에 holograms를 유지 하는 방법How to persist holograms across sessions

WorldAnchorStore를 사용 하면 세션 간에 WorldAnchor의 위치를 유지할 수 있습니다.The WorldAnchorStore will allow you to persist the location of WorldAnchor's across sessions. 실제로 세션 간에 holograms을 유지 하려면 특정 세계 앵커를 사용 하는 Gameobject를 별도로 추적 해야 합니다.To actually persist holograms across sessions, you'll need to separately keep track of your GameObjects that use a particular world anchor. 일반적으로 세계 앵커를 사용 하 여 GameObject 루트를 만들고 로컬 위치 오프셋을 사용 하 여 자식을 holograms 고정 하는 것이 좋습니다.It often makes sense to create a GameObject root with a world anchor and have children holograms anchored by it with a local position offset.

이전 세션에서 holograms를 로드 하려면 다음을 수행 합니다.To load holograms from previous sessions:

  1. WorldAnchorStore 가져오기Get the WorldAnchorStore
  2. 세계 앵커와 관련 된 앱 데이터를 로드 하 여 세계 앵커의 ID를 제공 합니다.Load app data relating to the world anchor, which gives you the ID of the world anchor
  3. 해당 ID에서 전 세계 앵커 로드Load a world anchor from its ID

이후 세션에 대해 holograms를 저장 하려면:To save holograms for future sessions:

  1. WorldAnchorStore 가져오기Get the WorldAnchorStore
  2. ID를 지정 하 여 전 세계 앵커 저장Save a world anchor specifying an ID
  3. ID와 함께 세계 앵커와 관련 된 앱 데이터 저장Save app data relating to the world anchor along with an ID

WorldAnchorStore 가져오기Getting the WorldAnchorStore

작업을 수행할 준비가 된 시기를 알 수 있도록 WorldAnchorStore에 대 한 참조를 유지 하려고 합니다.You'll want to keep a reference to the WorldAnchorStore so you know when it's ready to perform an operation. 비동기 호출 이므로 시작 하는 즉시 다음을 호출 합니다.Since this is an async call, potentially as soon as start up, you want to call:

WorldAnchorStore.GetAsync(StoreLoaded);

이 경우 WorldAnchorStore가 로드를 완료 한 경우에 대 한 처리기입니다.StoreLoaded in this case is our handler for when the WorldAnchorStore has completed loading:

private void StoreLoaded(WorldAnchorStore store)
{
       this.store = store;
}

이제 특정 세계 앵커를 저장 하 고 로드 하는 데 사용할 WorldAnchorStore에 대 한 참조가 있습니다.We now have a reference to the WorldAnchorStore, which we'll use to save and load specific World Anchors.

WorldAnchor 저장Saving a WorldAnchor

저장 하기 위해 저장 하는 항목의 이름을로 하 고 저장 하려는 경우 앞에서 받은 WorldAnchor에 전달 하기만 하면 됩니다.To save, we simply need to name what we are saving and pass it in the WorldAnchor we got before when we want to save. 참고: 두 앵커를 같은 문자열에 저장 하려고 하면 실패 합니다 (store. Save는 false를 반환 합니다.Note: trying to save two anchors to the same string will fail (store.Save will return false). 이전 저장을 삭제 한 후 새 저장을 저장 합니다.Delete the previous save before saving the new one:

private void SaveGame()
{
       // Save data about holograms positioned by this world anchor
       if (!this.savedRoot) // Only Save the root once
       {
              this.savedRoot = this.store.Save("rootGameObject", anchor);
              Assert(this.savedRoot);
       }
}

WorldAnchor 로드Loading a WorldAnchor

로드 하려면 다음을 수행 합니다.And to load:

private void LoadGame()
{
       // Save data about holograms positioned by this world anchor
       this.savedRoot = this.store.Load("rootGameObject", rootGameObject);
       if (!this.savedRoot)
       {
              // We didn't actually have the game root saved! We have to re-place our objects or start over
       }
}

저장소를 추가로 사용할 수도 있습니다. Delete ()-이전에 저장 하 고 저장 한 앵커를 제거 합니다. 이전에 저장 된 모든 데이터를 제거 하려면 ()를 선택 취소 합니다.We additionally can use store.Delete() to remove an anchor we previously saved and store.Clear() to remove all previously saved data.

기존 앵커 열거Enumerating Existing Anchors

이전에 저장 된 앵커를 검색 하려면 GetAllIds를 호출 합니다.To discover previously stored anchors, call GetAllIds.

string[] ids = this.store.GetAllIds();
for (int index = 0; index < ids.Length; index++)
{
        Debug.Log(ids[index]);
}

여러 장치에 대 한 holograms 유지Persisting holograms for multiple devices

Azure 공간 앵커 를 사용 하 여 로컬 WorldAnchor에서 영 속 클라우드 앵커를 만들 수 있습니다. 그러면 해당 장치가 동시에 함께 제공 되지 않는 경우에도 앱이 여러 HoloLens, IOS 및 Android 장치에서 찾을 수 있습니다.You can use Azure Spatial Anchors to create a durable cloud anchor from a local WorldAnchor, which your app can then locate across multiple HoloLens, iOS and Android devices, even if those devices aren't present together at the same time. 클라우드 앵커는 지속 되기 때문에 시간에 따른 여러 장치는 동일한 물리적 위치에서 해당 앵커에 대해 렌더링 된 콘텐츠를 볼 수 있습니다.Because cloud anchors are persistent, multiple devices over time can each see content rendered relative to that anchor in the same physical location.

Unity에서 공유 환경 빌드를 시작 하려면 5 분 Azure 공간 앵커 Unity 퀵 스타트를 사용해 보세요.To get started building shared experiences in Unity, try out the 5-minute Azure Spatial Anchors Unity quickstarts.

Azure 공간 앵커를 사용 하 여 실행 하면 Unity에서 앵커를 만들고 찾을수 있습니다.Once you're up and running with Azure Spatial Anchors, you can then create and locate anchors in Unity.

다음 개발 검사점Next Development Checkpoint

앞서 설명한 Unity 개발 검사점 경험을 팔로 사용할 경우 혼합 현실 핵심 빌딩 블록을 탐색 하는 것이 좋습니다.If you're following the Unity development checkpoint journey we've laid out, you're in the midst of exploring the Mixed Reality core building blocks. 여기에서 다음 구성 요소를 계속 진행할 수 있습니다.From here, you can continue to the next building block:

또는 Mixed Reality 플랫폼 기능 및 API로 이동합니다.Or jump to Mixed Reality platform capabilities and APIs:

언제든지 Unity 개발 검사점으로 돌아갈 수 있습니다.You can always go back to the Unity development checkpoints at any time.

참고 항목See Also