สร้างจุดยึดด้วย ARCore สำหรับ Jetpack XR

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)