Jetpack XR için ARCore ile ankraj oluşturma

Sabitleyici, gerçek dünyadaki sabit bir konumu ve yönü tanımlar. Bir nesneyi bir ankraja bağlamak, nesnelerin gerçek dünyada gerçekçi bir şekilde yerleştirilmiş görünmesine yardımcı olur.

Jetpack XR için ARCore oturumu oluşturma

Jetpack XR için ARCore oturumu aracılığıyla ankrajlar oluşturun. Session almak için Oturumların yaşam döngüsünü anlama başlıklı makaleyi inceleyin.

Oturumu yapılandırma

Yer işaretleri oluşturmak ve yüklemek için oturumun yapılandırılması gerekmez. Ancak ankraj devamlılığı, XR oturumlarında varsayılan olarak etkin değildir. Sabitlemek ve yüklemek için oturumu yapılandırın:

val newConfig = session.config.copy(
    anchorPersistence = Config.AnchorPersistenceMode.Enabled,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureConfigurationNotSupported ->
        TODO(/* Some combinations of configurations are not valid. Handle this failure case. */)
    is SessionConfigurePermissionsNotGranted ->
        TODO(/* The required permissions in result.permissions have not been granted. */)
    is SessionConfigureSuccess -> TODO(/* Success! */)
}

İçeriği alanda sabit bir konuma sabitleme

Bir Pose kullanılarak bir ankraj oluşturulur. Bu ankraj, mevcut bir Trackable'e göre yorumlanabilir veya yorumlanamaz.

İzlenebilir öğeye göre bir anafor oluşturma

Bir sabitleyici, Plane gibi bir Trackable'ye göre oluşturulduğunda, sabitleyici, alanda hareket ederken bağlı Trackable'yi takip eder.

when (val result = trackable.createAnchor(pose)) {
    is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ }
    else -> { /* handle failure */ }
}

İzlenebilir olmadan bir ana sayfa bağlantısı oluşturma

Trackable öğesine bağlı olmayan bir ana başlık oluşturmak için:

when (val result = Anchor.create(session, pose)) {
    is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ }
    else -> { /* handle failure */ }
}

Bir öğeyi bir ana sayfaya ekleme

Bu konumda bir model oluşturmak için [GltfModel oluşturun][5] ve üst öğesini AnchorEntity olarak ayarlayın.

AnchorEntity.create(session, anchor).apply {
    setParent(session.activitySpace)
    addChild(entity)
}

TrackingState'i anlama

Her Trackable öğesinin, kullanılmadan önce kontrol edilmesi gereken bir TrackingState'si vardır. Tracking TrackableState değerine sahip bir Trackable'nin Pose değeri sistem tarafından etkin bir şekilde güncellenir. Paused olan bir Trackable gelecekte Tracking olabilir, ancak Stopped olan bir Trackable hiçbir zaman Tracking olmaz.

Sabit noktaları oturumlar boyunca koruma

Kalıcı olmayan bir ankraj, oturum sona erdikten sonra kaybolur. Uygulamanız, bir ankarayı kalıcı hale getirerek bu ankarayı özel uygulama verilerinde hatırlar. Bu ankraj, sonraki bir oturumda alınabilir ve dünyadaki aynı konuma sabitlenir.

Sabit bir yer işareti oluşturmak için burada gösterildiği gibi anchor.persist() simgesini kullanın:

val uuid = anchor.persist()

Uygulamanız, gelecekteki bir oturumda UUID kullanarak ankörü 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 sabitleyiciye ihtiyacınız kalmadığında unpersist() numaralı telefonu arayın. Bu işlem, ankörü uygulamanızın depolama alanından kaldırır ve belirtilen 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 ankrajların listesini de isteyebilir:

val uuids = Anchor.getPersistedAnchorUuids(session)