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

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

יצירת פעילות ARCore ל-Jetpack XR

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

הגדרת הסשן

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

עיגון תוכן למיקום קבוע במרחב

עוגן נוצר באמצעות 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 שצריך לבדוק לפני שמשתמשים בו. מערכת Trackable עם TrackableState של Tracking מעדכנת את Pose באופן פעיל. Trackable עם הערך Paused עשוי להפוך בעתיד ל-Tracking, אבל Trackable עם הערך 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)