Anchor อธิบายตำแหน่งและทิศทางที่แน่นอนในโลกแห่งความจริง การแนบออบเจ็กต์กับ Anchor จะช่วยให้ออบเจ็กต์ดูเหมือนวางอยู่ในโลกจริงอย่างสมจริง
เข้าถึงเซสชัน
สร้าง Anchor ผ่าน ARCore สำหรับ Jetpack XR Session หากคุณกำลังปรับปรุง UI เชิงพื้นที่โดยใช้ Jetpack Compose สำหรับ XR โปรดเข้าถึงเซสชันจาก Jetpack Compose สำหรับ XR หากคุณกำลังทำงานกับเอนทิตีเชิงพื้นที่
จากไลบรารี Jetpack SceneCore ให้เข้าถึงเซสชันจาก Jetpack XR
Runtime
กำหนดค่าเซสชัน
การสร้างและโหลด Anchor ไม่จำเป็นต้องกำหนดค่าเซสชัน
อย่างไรก็ตาม ระบบจะไม่ได้เปิดใช้การคงอยู่ของ Anchor โดยค่าเริ่มต้นในเซสชัน XR หากต้องการบันทึกและโหลด Anchor จากพื้นที่เก็บข้อมูลในเครื่อง ให้กำหนดค่าเซสชันและตั้งค่าโหมด AnchorPersistenceMode.LOCAL ดังนี้
val newConfig = session.config.copy( anchorPersistence = Config.AnchorPersistenceMode.LOCAL, ) when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
ยึดเนื้อหาไว้กับตำแหน่งคงที่ในพื้นที่
ระบบจะสร้างจุดยึดโดยใช้ Pose ซึ่งตีความได้โดยอิงกับ Trackable ที่มีอยู่หรือไม่ก็ได้
สร้างจุดยึดที่สัมพันธ์กับ Trackable
เมื่อสร้าง Anchor ที่สัมพันธ์กับ Trackable เช่น Plane ซึ่ง
ทำให้ Anchor ติดตาม Trackable ที่แนบมาเมื่อเคลื่อนที่ผ่านพื้นที่
when (val result = trackable.createAnchor(pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
สร้างสมอโดยไม่มี Trackable
วิธีสร้างสมอที่ไม่ติดกับ Trackable
when (val result = Anchor.create(session, pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
แนบเอนทิตีกับสมอ
หากต้องการแสดงโมเดลในตำแหน่งนี้ ให้สร้าง GltfModel และตั้งค่า
องค์ประกอบหลักเป็น AnchorEntity
AnchorEntity.create(session, anchor).apply { parent = session.scene.activitySpace addChild(entity) }
ทำความเข้าใจ TrackingState
Trackable แต่ละรายการมี TrackingState ที่ควรตรวจสอบก่อนใช้งาน
ระบบจะอัปเดต Pose ของ Trackable ที่มี TrackableState เป็น Tracking อย่างต่อเนื่อง
Trackable ที่Pausedอาจกลายเป็นTrackingในอนาคต แต่Stopped จะไม่มีวันกลายเป็นTracking
คง 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 } }
เมื่อไม่ต้องการสมออีกต่อไป ให้โทรหา unpersist() การดำเนินการนี้จะนำ
Anchor ออกจากที่เก็บข้อมูลของแอปและทำให้ UUID ที่ระบุเรียกข้อมูลไม่ได้สำหรับการเรียกไปยัง Anchor.load()
Anchor.unpersist(session, uuid)
แอปยังขอรายการ Anchor ทั้งหมดที่บันทึกไว้ซึ่งยังคงอยู่ในที่เก็บข้อมูลของแอปได้ด้วย โดยทำดังนี้
val uuids = Anchor.getPersistedAnchorUuids(session)