Đ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.
Trackable
có TrackableState
là Tracking
sẽ có Pose
được hệ thống chủ động cập nhật. Trackable
là Paused
có thể trở thành Tracking
trong tương lai, trong khi Trackable
là 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 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)