Anchor อธิบายตำแหน่งและทิศทางที่แน่นอนในโลกแห่งความจริง การแนบออบเจ็กต์กับ Anchor จะช่วยให้ออบเจ็กต์ดูเหมือนวางอยู่ในโลกจริงอย่างสมจริง
สร้างเซสชัน ARCore สำหรับ Jetpack XR
สร้าง Anchor ผ่านเซสชัน ARCore สำหรับ Jetpack XR ดูทําความเข้าใจวงจรของเซสชันเพื่อรับ Session
กำหนดค่าเซสชัน
การสร้างและโหลด Anchor ไม่จำเป็นต้องกำหนดค่าเซสชัน
อย่างไรก็ตาม ระบบจะไม่ได้เปิดใช้การคงอยู่ของ Anchor โดยค่าเริ่มต้นในเซสชัน XR หากต้องการบันทึก
และโหลด Anchor จากพื้นที่เก็บข้อมูลในเครื่อง ให้กำหนดค่าเซสชันและตั้งค่าโหมด
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. */) }
ยึดเนื้อหาไว้กับตำแหน่งคงที่ในพื้นที่
ระบบจะสร้าง Anchor โดยใช้ 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
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
ที่ควรตรวจสอบก่อนใช้งาน
ระบบจะอัปเดต Trackable
ที่มี TrackableState
เป็น Tracking
อย่างต่อเนื่อง
Pose
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)