Tạo neo bằng ARCore cho Jetpack XR

Điểm neo mô tả một vị trí và hướng cố định trong thế giới thực. Việc đính kèm một đối tượng vào một neo giúp các đối tượng xuất hiện một cách chân thực trong thế giới thực.

Tạo phiên ARCore cho Jetpack XR

Tạo neo thông qua phiên ARCore cho Jetpack XR. Hãy xem phần Tìm hiểu vòng đời của Phiên để lấy Session.

Định cấu hình phiên

Bạn không cần phải định cấu hình phiên để tạo và tải neo. Tuy nhiên, tính năng liên kết cố định không được bật theo mặc định trên các phiên XR. Để lưu trữ và tải neo, hãy định cấu hình phiê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! */)
}

Liên kết nội dung với một vị trí cố định trong không gian

Một neo được tạo bằng Pose. Neo này có thể được diễn giải tương ứng với Trackable hiện có hoặc không.

Tạo một neo tương ứng với một đối tượng có thể theo dõi

Khi một neo được tạo tương ứng với một Trackable, chẳng hạn như Plane, điều này sẽ khiến neo theo Trackable đính kèm khi di chuyển trong không gian.

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

Tạo một neo không có Đối tượng có thể theo dõi

Cách tạo một neo không được đính kèm vào Trackable:

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

Đính kèm một thực thể vào một neo

Để kết xuất một mô hình tại vị trí này, hãy [tạo một GltfModel][5] và đặt thành phần mẹ của mô hình đó thành AnchorEntity.

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

Tìm hiểu về TrackingState

Mỗi Trackable có một TrackingState cần được kiểm tra trước khi sử dụng. TrackableTrackableStateTracking sẽ có Pose được hệ thống chủ động cập nhật. TrackablePaused có thể trở thành Tracking trong tương lai, trong khi TrackableStopped sẽ không bao giờ trở thành Tracking.

Duy trì một neo trong suốt các phiên

Một neo không tồn tại sẽ biến mất sau khi một phiên bị huỷ. Bằng cách lưu trữ một neo, ứng dụng của bạn sẽ ghi nhớ vị trí của neo đó trong dữ liệu ứng dụng riêng tư. Bạn có thể truy xuất liên kết này trong một phiên tiếp theo và liên kết này được liên kết ở cùng một vị trí trên thế giới.

Để duy trì một neo, hãy sử dụng anchor.persist() như minh hoạ ở đây:

val uuid = anchor.persist()

Ứng dụng của bạn có thể truy xuất neo bằng cách sử dụng UUID trong một phiên trong tương lai:

when (val result = Anchor.load(session, uuid)) {
    is AnchorCreateSuccess -> {
        // Loading was successful. The anchor is stored in result.anchor.
    }
    else -> {
        // handle failure
    }
}

Khi bạn không cần neo nữa, hãy gọi unpersist(). Thao tác này sẽ xoá neo khỏi bộ nhớ của ứng dụng và khiến UUID đã cho không thể truy xuất được đối với các lệnh gọi đến Anchor.load().

Anchor.unpersist(session, uuid)

Ứng dụng của bạn cũng có thể yêu cầu danh sách tất cả các neo đã được duy trì và vẫn có trong bộ nhớ của ứng dụng:

val uuids = Anchor.getPersistedAnchorUuids(session)