Điểm neo mô tả vị trí và hướng 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 và giúp ứng dụng của bạn tiết kiệm năng lượng bằng cách không phải chạy logic ở mọi khung hình.
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í trong không gian
Một điểm 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 cố định trên thế giới. 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ư Plane, điểm neo này
sẽ đi theo Anchorable được đính kèm khi di chuyển trong không gian.
val anchor = plane.createAnchor(pose)
Tạo một điểm neo cố định trong thế giới thực
Để tạo một điểm neo cố định trong thế giới thực, đừng đính kèm điểm neo đó vào một Anchorable. Chỉ sử dụng loại điểm neo này cho những điểm đang trôi nổi trong không gian vì ước tính của phiên về vị trí của các đối tượng không thể di chuyển sẽ thay đổi theo thời gian:
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.
AnchorSpace.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 Trackable có TrackableState là Tracking 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 Anchor 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)