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 sẽ 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 một 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 một 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, 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 = session.config.copy( anchorPersistence = Config.AnchorPersistenceMode.LOCAL, ) when (val result = session.configure(newConfig)) { is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* A different unhandled exception was thrown. */) }
Ghim nội dung vào một vị trí cố định 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 Trackable
hiện có hoặc không.
Tạo một điểm neo tương ứng với một Trackable
Khi một điểm neo được tạo tương ứng với một Trackable
, chẳng hạn như một Plane
, điểm neo sẽ đi theo Trackable
được đính kèm khi Trackable
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 điểm neo mà không có Trackable
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 đ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 một AnchorEntity
.
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 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 điểm neo, ứng dụng của bạn sẽ ghi nhớ vị trí của điểm 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)