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 = 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 ที่ยึดไว้ในโลก
หากต้องการสร้าง Anchor ที่ยึดไว้ในโลก ให้ไม่ต้องแนบ Anchor กับ Anchorable ใช้ Anchor ประเภทนี้กับจุดที่ลอยอยู่ในพื้นที่เท่านั้น เนื่องจากค่าประมาณของเซสชันเกี่ยวกับตำแหน่งของออบเจ็กต์ที่ไม่สามารถเคลื่อนย้ายได้จะเปลี่ยนแปลงไปตามเวลา
val anchor = Anchor.create(session, pose)
แนบเอนทิตีกับ Anchor
หากต้องการแสดงผลโมเดลในตำแหน่งนี้ ให้ สร้าง GltfModel และตั้งค่า
องค์ประกอบหลักเป็น AnchorSpace
AnchorSpace.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 ไว้ในตำแหน่งเดียวกันในโลก
หากต้องการคงอยู่ของ 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)