יצירת עוגנים באמצעות ARCore ל-Jetpack XR

מכשירי XR רלוונטיים
ההנחיות האלה יעזרו לכם ליצור חוויות למכשירי XR מהסוגים האלה.
משקפי XR
משקפי AR חוטיים

עוגן מתארת מיקום וכיוון קבועים בעולם האמיתי. צירוף אובייקט לעוגן עוזר לאובייקטים להיראות כאילו הם ממוקמים בצורה מציאותית בעולם האמיתי.

גישה לסשן

יצירת עוגנים באמצעות Session של ARCore for Jetpack XR. אם אתם משפרים ממשק משתמש מרחבי באמצעות Jetpack Compose for XR, אתם יכולים לגשת לסשן מ-Jetpack Compose for XR. אם אתם עובדים עם ישויות מרחביות מספריית Jetpack SceneCore, אתם צריכים לגשת לסשן מ-Jetpack XR Runtime.

הגדרת הסשן

לא צריך להגדיר את הסשן כדי ליצור ולטעון עוגנים. עם זאת, התכונה "המשכיות עוגנים" לא מופעלת כברירת מחדל בסשנים של XR. כדי לשמור ולטעון עוגנים מהאחסון המקומי, צריך להגדיר את הסשן ולבחור את המצב של 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

כשיוצרים עוגן ביחס לTrackable, כמו Plane, העוגן עוקב אחרי 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.persist() כמו בדוגמה הבאה:

val uuid = anchor.persist()

האפליקציה יכולה לאחזר את העוגן באמצעות UUID בסשן עתידי:

when (val result = Anchor.load(session, uuid)) {
    is AnchorCreateSuccess -> {
        // Loading was successful. The anchor is stored in result.anchor.
    }
    else -> {
        // handle failure
    }
}

כשכבר לא צריך את העוגן, מפעילים את unpersist(). הפעולה הזו מסירה את העוגן מאחסון האפליקציה ומונעת את האפשרות לאחזר את ה-UUID שצוין עבור קריאות ל-Anchor.load().

Anchor.unpersist(session, uuid)

האפליקציה יכולה גם לבקש רשימה של כל העוגנים שנשמרו ועדיין נמצאים באחסון של האפליקציה:

val uuids = Anchor.getPersistedAnchorUuids(session)