Bir hedefi takip eden alt uzay ekleme

Uygun XR cihazlar
Bu kılavuz, bu tür XR cihazları için deneyimler geliştirmenize yardımcı olur.
XR Kulaklığı
Kablolu XR Gözlükleri

Standart bir Subspace, sistem tarafından belirlenen sabit bir konumda kalır. Ancak bazen uygulamanızın uzamsal kullanıcı arayüzünün kullanıcıyla birlikte dinamik olarak hareket etmesini veya ortamındaki ya da gerçek dünyadaki belirli bir konuma bağlı kalmasını isteyebilirsiniz. Başlığa sabitlenmiş HUD'ler veya gerçek dünyadaki nesnelere eklenmiş bilgi panelleri gibi deneyimler oluşturmak için Subspace öğesinin follow parametresine bir FollowTarget iletebilirsiniz.

Kullanıcının görünümünü takip eden bir alt alan ekleme

Kullanıcının görüş alanına göre konumlandırılmış bir alt alan eklemek için FollowTarget.view öğesini kullanın. Belirttiğiniz takip moduna bağlı olarak bu, kullanıcının kafa hareketlerini sürekli olarak takip etmenize veya içeriği baktığı yere göre statik olarak yerleştirmenize olanak tanır. Bu özelliği HUD'ler, kalıcı bildirimler veya hızlı işlem kontrolleri gibi öğeler için kullanabilirsiniz.

İzinleri beyan etme ve isteme

İzin istemeden önce <uses-permission> öğesini kullanarak izinleri uygulamanızın manifest dosyasında beyan etmeniz gerekir.

<manifest ...>
    <!-- Only declare permissions that your app actually needs. In this example,
    we declare permissions for head tracking. -->
    <uses-permission android:name="android.permission.HEAD_TRACKING"/>
    <application ...>
        ...
    </application>
</manifest>

Şimdi izinleri isteyin. Daha fazla bilgi edinmek için izin ilkelerini ve iş akışlarını inceleyerek kullanıcılarınıza en iyi deneyimi sunduğunuzdan emin olun. Örneğin, kullanıcının uygulamanızın gerektirdiği çalışma zamanında istenen izinleri verip vermediğini ve bu izni istemeden önce uygulamanızın kullanıcıya gerekçe göstermesi gerekip gerekmediğini kontrol edin.

Oturumunuzu yapılandırma

Ardından, DeviceTrackingMode.SPATIAL ayarını yaparak uygulamanızın XR için Jetpack Compose kullanılırken oluşturulan oturumunu yapılandıracaksınız:

val session = checkNotNull(LocalSession.current)
session.configure(
    config = Config.Builder(session.config).setDeviceTracking(DeviceTrackingMode.SPATIAL)
        .build()
)

Alt alanı oluşturma

Son olarak, kullanıcının görünümünü hedefleyen bir alt uzay ve takip modu oluşturacaksınız:

// Example: A subspace that softly follows the user's view (like a HUD)
Subspace(
    follow = FollowTarget.view(
        // Customizing the soft follow to move slightly faster and tracking all dimensions
        mode = FollowMode.soft(
        )
    ),
    modifier = modifier,
) {
    SpatialPanel {
      // SpatialPanel Content
    }
}

Kullanıcının görünümünü hedefleyen alt uzaylar için takip modları

Hedef olarak FollowTarget.view kullandığınızda bir FollowMode belirterek içeriğin nasıl davranacağını özelleştirebilirsiniz:

  • FollowMode.soft: İçerik, hedefin hareketlerini kademeli olarak yakalayarak yumuşak bir kayma efekti oluşturur.
  • FollowMode.snap: İçerik, kullanıcının ilk görüntüleme pozuna göre bir kez kullanıcının önüne yerleştirilir ve daha sonra sabit kalır.
  • FollowMode.tight: İçerik, kullanıcının bakış açısını minimum gecikmeyle anında takip ederek içeriği kullanıcının hareketine sıkı sıkıya bağlı tutar.

Tüm takip modları, aşağıdaki seçeneklerden hareketin hangi boyutlarının izleneceğini seçmenize olanak tanır:

  • X ekseni
  • Y ekseni
  • Teklifinizi sunun
  • Rulo
  • Sapma açısı
  • RotationOnly: Dönüşle ilgili boyutları (eğim, sapma ve yuvarlanma) izlemek için tek bir değer belirtmenize olanak tanır.

Bu boyutların herhangi bir kombinasyonunu seçebilir veya hepsini izleyen varsayılan TrackedDimensions.All değerini kullanabilirsiniz.

Çevresel bir özelliği takip eden bir alt alan ekleme

Uzamsal içeriği kullanıcının ortamındaki fiziksel bir özelliğe sıkı bir şekilde kilitleyen bir alt uzay eklemek için FollowTarget.anchor() kullanın. Algılanan bir düzlemi, bir sabitleyiciyi veya coğrafi konumu takip etmek için bu hedef türünü kullanın.

Gerçek dünyadaki özellikleri takip etmek, takip ettiğiniz özelliğe bağlı olarak ek izinler ve oturum yapılandırmaları gerektirir.

ARCore özellikleri için algılama özellikleriyle çalışmanın yanı sıra gerekli izinleri ayarlama ve oturumunuzu FollowTarget.anchor() kullanacak şekilde yapılandırma hakkında ayrıntılı talimatlar için Düzlemler, Bağlantı noktaları ve Coğrafi pozlar ile ilgili Jetpack XR SDK belgelerine bakın.

Aşağıdaki örnekte, gerçek dünyadaki bir yer işaretini takip eden bir alt uzay oluşturulmaktadır:

// A subspace locked to a real-world anchor
Subspace(
    follow = FollowTarget.anchor(anchor = myAnchor)
) {
    // Rotate the panel to ensure it faces the user while remaining anchored
    SpatialPanel(SubspaceModifier.rotateToLookAtUser()) {
      // SpatialPanel Content
    }
}

Mekansal çakışmayı önleme

Oluşturduğunuz her Subspace, kendi bağımsız 3D sahnesini yönetir ve mevcut diğer alt uzaylardan haberdar değildir. Bu nedenle, çarpışmaları otomatik olarak önlemez.

Baş kilitli HUD'nizin sabitlenmiş ÖY panellerinizde kırpılmasını (Z-fighting) önlemek için aşağıdaki yöntemleri kullanarak düzen hacimlerinizi açıkça yönetin:

  1. Ofsetleri kullanma: Çevresel kullanıcı arayüzünü (ör. HUD) Z ekseninde daha yakına veya uzağa itmek ya da kullanıcının görüş alanının kenarlarına kaydırmak için SubspaceModifier.offset kullanın.
  2. Boyutları kısıtlama: Alanlarınızın sınırlayıcı kutularını kısıtlamak için requiredSizeIn gibi değiştiriciler uygulayın.

Koordinat alanları, düzen kısıtlamaları ve mevcut tüm izleme yapılandırmaları hakkında daha fazla bilgi için Subspace referans belgelerini inceleyin.