Anchor อธิบายตำแหน่งและการวางแนวที่คงที่ในโลกจริง การแนบออบเจ็กต์กับ Anchor จะช่วยให้ออบเจ็กต์ปรากฏในโลกจริงได้อย่างสมจริง
เข้าถึงเซสชัน
สร้าง Anchor ผ่าน ARCore for Jetpack XR Session หากคุณกำลัง
ปรับปรุง UI เชิงพื้นที่ โดยใช้ Jetpack Compose for XR ให้เข้าถึงเซสชันจาก
Jetpack Compose for XR หากคุณกำลังทำงานกับ เอนทิตีเชิงพื้นที่
จากไลบรารี Jetpack SceneCore ให้เข้าถึงเซสชันจาก Jetpack XR
Runtime
กำหนดค่าเซสชัน
การสร้างและโหลด Anchor ไม่จำเป็นต้องกำหนดค่าเซสชัน
อย่างไรก็ตาม ระบบจะไม่ได้เปิดใช้การคงอยู่ของ Anchor ในเซสชัน XR โดยค่าเริ่มต้น หากต้องการคงอยู่
และโหลด Anchor จากพื้นที่เก็บข้อมูลในเครื่อง ให้กำหนดค่าเซสชันและตั้งค่า
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. */) }
ยึดเนื้อหา Anchor ไว้กับตำแหน่งที่คงที่ในพื้นที่
ระบบจะสร้าง Anchor โดยใช้ Pose ซึ่งสามารถตีความได้โดยสัมพันธ์กับ
Anchorable ที่มีอยู่หรือไม่ก็ได้ Anchorable คือ Trackable
ที่สามารถแนบ Anchor ได้
สร้าง Anchor โดยสัมพันธ์กับ Anchorable
เมื่อสร้าง Anchor โดยสัมพันธ์กับ Anchorable เช่น Plane ซึ่งจะทำให้ Anchor ติดตาม Anchorable ที่แนบไว้เมื่อเคลื่อนที่ผ่านพื้นที่
val anchor = plane.createAnchor(pose)
สร้าง Anchor โดยไม่มี Anchorable
วิธีสร้าง Anchor ที่ไม่ได้แนบกับ Anchorable
val anchor = Anchor.create(session, pose)
แนบเอนทิตีกับ Anchor
หากต้องการแสดงผลโมเดลในตำแหน่งนี้ ให้ สร้าง GltfModel และตั้งค่า
องค์ประกอบหลักเป็น AnchorSpace
AnchorEntity.create(session, anchor).apply { parent = session.scene.activitySpace addChild(entity) }
ทำความเข้าใจ TrackingState
Trackable แต่ละรายการมี TrackingState ที่ควรตรวจสอบก่อนใช้งาน
Trackable ที่มี TrackableState เป็น Tracking จะมี Pose ที่ระบบอัปเดตอย่างต่อเนื่อง
Trackable ที่มีสถานะเป็น Paused อาจเปลี่ยนเป็น Tracking ในอนาคต แต่ Trackable ที่มีสถานะเป็น Stopped จะไม่เปลี่ยนเป็น Tracking
คงอยู่ของ Anchor ตลอดเซสชัน
Anchor ที่ไม่ได้คงอยู่จะหายไปหลังจากทำลายเซสชัน การคงอยู่ของ Anchor จะทำให้แอปจดจำตำแหน่งของ Anchor ในข้อมูลแอปส่วนตัวได้ คุณสามารถดึงข้อมูล Anchor นี้ในเซสชันต่อมาและยึด Anchor ไว้ในตำแหน่งเดียวกันในโลก
หากต้องการคงอยู่ของ Anchor ให้ใช้ Anchor.persist() ดังที่แสดงไว้ที่นี่
val uuid = anchor.persist()
แอปสามารถดึงข้อมูล Anchor ได้โดยใช้ UUID ในเซสชันในอนาคต
when (val result = Anchor.load(session, uuid)) { is AnchorCreateSuccess -> { // Loading was successful. The anchor is stored in result.anchor. } else -> { // handle failure } }
เมื่อไม่ต้องการ Anchor แล้ว ให้เรียกใช้ unpersist() ซึ่งจะนำ
Anchor ออกจากพื้นที่เก็บข้อมูลของแอปและทำให้ UUID ที่ระบุไม่สามารถดึงข้อมูลได้สำหรับการเรียกใช้
Anchor.load()
Anchor.unpersist(session, uuid)
นอกจากนี้ แอปยังขอรายการ Anchor ทั้งหมดที่คงอยู่และยังคงอยู่ในพื้นที่เก็บข้อมูลของแอปได้ด้วย
val uuids = Anchor.getPersistedAnchorUuids(session)