Unity 'de sistemleri koordinat

Windows Mixed Reality, yalnızca yönlendirme ve bölünmüş ölçekli uygulamalardan çok çeşitli deneyimlerde bulunan uygulamaları, oda ölçeğinde uygulamalar aracılığıyla destekler. HoloLens üzerinde daha fazla gidip, kullanıcıların bir bina ve ötesine geçen tüm zemin hakkında 5 ölçüm yürümesine izin veren dünya ölçeğinde uygulamalar oluşturabilirsiniz.

Unity 'de karma gerçeklik deneyimi oluşturmanın ilk adımındaki koordinat sistemleri öğrenmektir ve uygulamanızın hedeflediği deneyim ölçeğini seçersiniz .

Yalnızca Yönlendirme veya dağıtılmış ölçekli bir deneyim oluşturma

Ad alanı:UnityEngine. XR
Şunu yazın:XRDevice

Yalnızca Yönlendirme veya Dağıtılmış ölçekli bir deneyimoluşturmak için Unity 'yi sabit izleme alanı türüne ayarlamanız gerekir. Sabit izleme alanı, Unity 'nin dünya koordinat sistemini, başvurunun sabit çerçevesiniizleyecek şekilde ayarlar. Sabit izleme modunda, kameranın varsayılan konumunun (ilet-Z) önünde yalnızca düzenleyiciye yerleştirilmiş içerikler, uygulama başlatıldığında kullanıcının önünde görüntülenir.

XRDevice.SetTrackingSpaceType(TrackingSpaceType.Stationary);

Ad alanı:UnityEngine. XR
Tür:ınputtracking

Yalnızca bir 360 derecelik video Görüntüleyici (konum baş güncelleştirmelerinin yanıayı rulama olduğu) gibi yalnızca bir yalnızca Yönlendirme deneyimi Için XR 'yi ayarlayabilirsiniz. Inputtracking. disablePositionalTracking doğru:

InputTracking.disablePositionalTracking = true;

Ayrılmış ölçekte bir deneyimiçin, kullanıcının daha sonra yeniden giriş kaynağını girmesini sağlamak üzere XR 'yi çağırabilirsiniz. Inputtracking. recenter yöntemi:

InputTracking.Recenter();

Büyük ölçekli veya oda ölçeğinde bir deneyim oluşturma

Ad alanı:UnityEngine. XR
Şunu yazın:XRDevice

Büyük ölçekli veya Oda ölçeğinde bir deneyimiçin içeriği kata göre yerleştirmeniz gerekir. Kullanıcının taban düzeyi kaynak ve isteğe bağlı oda sınırını temsil eden, ilk çalıştırma sırasında ayarlanmış olan uzamsal aşamayıkullanarak kullanıcının katında size neden olursunuz.

Unity 'nin taban düzeyinde dünya koordinat sistemiyle çalıştığından emin olmak için, Unity 'yi ayarlayabilir ve bu ölçüm 'in RoomScale izleme alanı türünü kullanıp test edebilirsiniz:

if (XRDevice.SetTrackingSpaceType(TrackingSpaceType.RoomScale))
{
    // RoomScale mode was set successfully.  App can now assume that y=0 in Unity world coordinate represents the floor.
}
else
{
    // RoomScale mode was not set successfully.  App cannot make assumptions about where the floor plane is.
}
  • SetTrackingSpaceType true değerini döndürürse Unity, kendi dünya koordinat sistemini, başvurunun aşama çerçevesiniizlemek için başarıyla değiştirdi.
  • SetTrackingSpaceType yanlış döndürürse, büyük olasılıkla Kullanıcı ortamlarında bir kat ayarlamadığından Unity, başvurunun aşama çerçevesine geçiş yapamadı. Yanlış dönüş değeri yaygın olmadığından, aşama farklı bir odada ayarlandığında ve Kullanıcı yeni bir aşama ayarlamadan bu cihaz geçerli odaya taşınırsa gerçekleşebilir.

Uygulamanız RoomScale izleme alanı türünü başarıyla ayarladıktan sonra y = 0 düzlemi üzerine yerleştirilmiş içerik zemin üzerinde görünür. 0, 0, 0, 0, 0, 0, Stood, kurulum sırasında karşılaştığı ileriye dönük yönü temsil eden-Z ile, kullanıcının oda kurulumu sırasında bulunduğu kata özgü yer olacaktır.

Ad alanı:UnityEngine. deneysel. XR
Tür:sınır

Betik kodu ' nda, bir sınır poligonu almak için UnityEngine. deneysel. XR. sınır türünde TryGetGeometry yöntemini çağırabilirsiniz ve TrackedArea sınır türünü belirtebilirsiniz. Kullanıcı bir sınır tanımlarsa (köşelerin listesini geri alırsanız), kullanıcıya, oluşturduğunuz sahneyi dolaştırabilecekleri bir Oda ölçeği deneyimi sunma güvenlidir.

Not

Kullanıcı ona yaklaşırsa, sistem sınırı otomatik olarak işler. Uygulamanızın, sınırı işlemek için bu çokgeni kullanması gerekmez. Ancak, bu sınır poligonu kullanarak, kullanıcının bu nesnelere telemo olmadan fiziksel olarak erişebildiğinden emin olmak için, bu sınır çokgeni kullanarak sahne nesnelerinizi düzenlemek isteyebilirsiniz:

var vertices = new List<Vector3>();
if (UnityEngine.Experimental.XR.Boundary.TryGetGeometry(vertices, Boundary.Type.TrackedArea))
{
    // Lay out your app's content within the boundary polygon, to ensure that users can reach it without teleporting.
}

Dünya ölçeğinde bir deneyim oluşturma

Ad alanı:UnityEngine. xr. wsa
Yazın:worldanchor

kullanıcılara 5 ölçüm ötesinde izin veren HoloLens gerçek dünya ölçeğinde deneyimler için, oda ölçekli deneyimlere göre kullanılanların ötesinde yeni tekniklerin olması gerekir. Kullanacağınız bir anahtar teknii, kullanıcının ne kadar ilerlediğine bakılmaksızın fiziksel dünyadaki bir holograa kümesini kilitlemek için bir uzamsal bağlantı oluşturmak ve daha sonra bu hologramlarını daha sonra daha sonra bulmakiçin kullanır.

Unity 'de, bir GameObject 'e Worldanchor Unity bileşenini ekleyerek bir uzamsal bağlayıcı oluşturursunuz.

Dünya çıpası ekleme

Bir dünya çıpası eklemek için, gerçek dünyada bağlamak istediğiniz dönüşümle oyun nesnesinde AddComponent () çağırın.

WorldAnchor anchor = gameObject.AddComponent<WorldAnchor>();

İşte bu kadar! Bu oyun nesnesi artık fiziksel dünyadaki geçerli konumuna tutturulacaktır. fiziksel hizalamadan emin olmak için Unity dünya koordinatları zaman içinde biraz daha fazla ayarlama yapabilirsiniz. Bu bağlantılı konumu gelecekte bir uygulama oturumunda bulmak için kalıcılığı kullanın.

Bir dünya bağlayıcısını kaldırma

Artık bir oyun nesnesini fiziksel bir dünya konumuna kilitlemeniz ve bu çerçeveyi taşımayı düşünmüyorsanız, World bağlayıcı bileşeni üzerinde yok etme çağrısı yapabilirsiniz.

Destroy(gameObject.GetComponent<WorldAnchor>());

Bu çerçeveye gameobject ' i taşımak istiyorsanız bunun yerine destroyıımımımımımımımımımımımım

DestroyImmediate(gameObject.GetComponent<WorldAnchor>());

Dünya bağlantılı oyun nesnesini taşıma

Bir World çıpası üzerinde iken GameObject taşınamaz. Bu çerçeveye GameObject ' i taşımanız gerekiyorsa şunlar gerekir:

  1. Dünya çıpası bileşeni
  2. Oyununnesneyi taşı
  3. Oyun nesnesine yeni bir World bağlayıcı bileşeni ekleyin.
DestroyImmediate(gameObject.GetComponent<WorldAnchor>());
gameObject.transform.position = new Vector3(0, 0, 2);
WorldAnchor anchor = gameObject.AddComponent<WorldAnchor>();

Değişiklik yapılan değişiklikleri işleme

Bir süre içinde fiziksel dünyada bir WorldAnchor olamaz. Bu durum oluşursa, Unity bağlantılı nesnenin dönüşümünü güncelleştirmez. Bu, bir uygulama çalışırken da değişebilir. Locatability içindeki değişikliği işleyememesi nesnenin dünyadaki doğru fiziksel konumda görünmesine neden olur.

Locatability değişiklikleri hakkında bildirim almak için:

  1. OnTrackingChanged olayına abone olma
  2. Olayı işle

Temel alınan uzamsal bağlayıcının, locatable ve locatable gibi bir durum arasında değişmesi durumunda Ontrackingchanged olayı çağrılır.

anchor.OnTrackingChanged += Anchor_OnTrackingChanged;

Sonra olayı işleyin:

private void Anchor_OnTrackingChanged(WorldAnchor self, bool located)
{
    // This simply activates/deactivates this object and all children when tracking changes
    self.gameObject.SetActiveRecursively(located);
}

Bazen Tutturucular hemen bulunur. Bu durumda, AddComponent () döndürdüğünde, bağlayıcının bu özelliği true olarak ayarlanır. Sonuç olarak, OnTrackingChanged olayı tetiklenmeyecektir. Temiz bir model, bir tutturucu iliştirdikten sonra ilk ıbulunan durumuyla OnTrackingChanged işleyicinizi çağırmak olacaktır.

Anchor_OnTrackingChanged(anchor, anchor.isLocated);

Cihazlar arasında bağlayıcı paylaşma

Azure uzamsal bağlayıcılarını kullanarak, uygulamanızın birden çok HoloLens, iOS ve Android cihazlarda bulabileceği yerel bir worldanchor 'dan dayanıklı bir bulut bağlantısı oluşturun. Birden çok cihazda ortak bir uzamsal bağlantı paylaşımı yaparak, her kullanıcı aynı fiziksel konumdaki bu bağlantı noktasına göre işlenmiş içeriği görebilir. Bu, gerçek zamanlı paylaşılan deneyimler sağlar.

Unity 'de paylaşılan deneyimler oluşturmaya başlamak için, 5 dakikalık Azure uzamsal çıpası Unity hızlı başlangıçlarınıdeneyin.

Azure uzamsal bağlayıcılarla çalışmaya başladıktan sonra Unity 'de bağlayıcıları oluşturup bulabilirsiniz.

Sonraki geliştirme kontrol noktası

Belirlediğimiz Unity geliştirme kontrol noktası yolculuğunu takip ediyorsanız, karma gerçeklik temel yapı taşlarını araştırırken Orta ölçekli olursunuz. Buradan, sonraki yapı bloğuna devam edebilirsiniz:

Ya da karma gerçeklik platformu özelliklerine ve API 'Lerine atlayın:

Her zaman Unity geliştirme kontrol noktalarına dilediğiniz zaman geri dönebilirsiniz.

Ayrıca Bkz.