Tạo neo bằng ARCore cho Jetpack XR

Các thiết bị XR được hỗ trợ
Hướng dẫn này giúp bạn xây dựng các trải nghiệm cho những loại thiết bị XR sau.
Thiết bị đeo đầu XR
Kính thông minh XR có dây

Anchor 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 điểm 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.

Truy cập vào một phiên

Tạo neo thông qua ARCore cho Jetpack XR Session. Nếu bạn đang cải thiện giao diện người dùng không gian bằng Jetpack Compose cho XR, hãy truy cập vào một phiên từ Jetpack Compose cho XR. Nếu bạn đang làm việc với các thực thể được không gian hoá trong thư viện Jetpack SceneCore, hãy truy cập vào một phiên từ Jetpack XR Runtime.

Đị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, theo mặc định, tính năng duy trì điểm neo không được bật trên các phiên XR. Để duy trì và tải các neo từ bộ nhớ cục bộ, hãy định cấu hình phiên và đặt chế độ AnchorPersistenceMode.LOCAL:

val newConfig = Config.Builder(session.config)
    .setAnchorPersistence(AnchorPersistenceMode.LOCAL)
    .build()
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    else ->
        TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */)
}

Ghim nội dung vào một vị trí cố định trong không gian

Một neo được tạo bằng Pose, có thể được diễn giải tương ứng với Anchorable hiện có hoặc không. Anchorable là một Trackable có thể có các điểm neo được đính kèm.

Tạo một điểm neo tương ứng với một Anchorable

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

val anchor = plane.createAnchor(pose)

Tạo một điểm neo mà không có Anchorable

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

val anchor = Anchor.create(session, pose)

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

Để kết xuất một mô hình tại vị trí này, hãy tạo một GltfModel và đặt đối tượng mẹ của mô hình đó thành AnchorSpace.

AnchorEntity.create(session, anchor).apply {
    parent = session.scene.activitySpace
    addChild(entity)
}

Tìm hiểu về TrackingState

Mỗi Trackable đều có một TrackingState mà bạn nên kiểm tra trước khi sử dụng. Một TrackableTrackableStateTracking sẽ được hệ thống chủ động cập nhật Pose. Một Trackable Paused có thể trở thành Tracking trong tương lai, trong khi một Stopped 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 được duy trì sẽ biến mất sau khi một phiên bị huỷ. Bằng cách duy 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 điểm neo này trong một phiên tiếp theo và điểm neo này được neo ở 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ạ bên dưới:

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 sau này:

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 một điểm 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 cho 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 một danh sách tất cả các neo đã được duy trì và vẫn còn trong bộ nhớ của ứng dụng:

val uuids = Anchor.getPersistedAnchorUuids(session)