Sabit nokta, gerçek dünyadaki sabit bir konumu ve yönü tanımlar. Bir nesneyi tutturma noktasına eklemek, nesnelerin gerçek dünyada gerçekçi bir şekilde yerleştirilmiş görünmesine yardımcı olur.
Bir oturuma erişme
Jetpack XR için ARCore Session aracılığıyla bağlantı oluşturun. XR için Jetpack Compose kullanarak uzamsal kullanıcı arayüzünü geliştiriyorsanız XR için Jetpack Compose'dan bir oturuma erişin. Jetpack SceneCore kitaplığındaki uzamsallaştırılmış varlıklarla çalışıyorsanız Jetpack XR Çalışma Zamanı'ndan bir oturuma erişin.
Oturumu yapılandırma
Çapalama oluşturmak ve yüklemek için oturumun yapılandırılması gerekmez.
Ancak, sabitleme kalıcılığı XR oturumlarında varsayılan olarak etkin değildir. Yerel depolama alanındaki bağlantıları kalıcı hale getirmek ve yüklemek için oturumu yapılandırın ve AnchorPersistenceMode.LOCAL modunu ayarlayın:
val newConfig = session.config.copy( anchorPersistence = AnchorPersistenceMode.LOCAL, ) when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
İçeriği uzayda sabit bir konuma sabitleme
Sabit bağlantı, Pose kullanılarak oluşturulur. Bu bağlantı, mevcut bir Anchorable ile ilişkili olarak yorumlanabilir veya yorumlanmayabilir. Anchorable, sabit reklamların eklenebileceği bir Trackable'dır.
Anchorable öğesine göre bir bağlantı oluşturma
Anchorable'ya göre bir bağlantı oluşturulduğunda (ör. Plane) bağlantı, uzayda hareket ederken ekli Anchorable'yı takip eder.
when (val result = anchorable.createAnchor(pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Anchorable olmadan bağlantı oluşturma
Anchorable'ya bağlı olmayan bir bağlantı oluşturmak için:
when (val result = Anchor.create(session, pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Bir öğeyi bağlayıcıya ekleme
Bu konumda bir model oluşturmak için GltfModel oluşturun ve üst öğesini AnchorEntity olarak ayarlayın.
AnchorEntity.create(session, anchor).apply { parent = session.scene.activitySpace addChild(entity) }
TrackingState'i anlama
Her Trackable öğesinin kullanılmadan önce kontrol edilmesi gereken bir TrackingState değeri vardır.
Tracking TrackableState değerine sahip bir Trackable, Pose değerini sistem tarafından etkin bir şekilde günceller. Trackable olan bir Paused, gelecekte Tracking olabilir. Stopped olan bir Paused ise asla Tracking olmaz.
Oturumlar boyunca bir sabitleme noktasını koruma
Kalıcı olmayan bir bağlantı, oturum sonlandırıldıktan sonra kaybolur. Uygulamanız, bir sabitleme noktasını kalıcı hale getirerek bu sabitleme noktasının özel uygulama verilerindeki konumunu hatırlar. Bu bağlantı, sonraki bir oturumda alınabilir ve dünyada aynı konuma sabitlenir.
Bir sabitleme noktasını kalıcı hale getirmek için burada gösterildiği gibi Anchor.persist() kullanın:
val uuid = anchor.persist()
Uygulamanız, gelecekteki bir oturumda UUID kullanarak bağlantı noktasını alabilir:
when (val result = Anchor.load(session, uuid)) { is AnchorCreateSuccess -> { // Loading was successful. The anchor is stored in result.anchor. } else -> { // handle failure } }
Artık bir sabitleyiciye ihtiyacınız olmadığında unpersist() işlevini çağırın. Bu işlem, sabiti uygulamanızın depolama alanından kaldırır ve verilen UUID'yi Anchor.load() çağrıları için alınamaz hale getirir.
Anchor.unpersist(session, uuid)
Uygulamanız, kalıcı hale getirilmiş ve uygulamanızın depolama alanında hâlâ bulunan tüm bağlantı noktalarının listesini de isteyebilir:
val uuids = Anchor.getPersistedAnchorUuids(session)