נקודת עיגון מתארת מיקום ומיקום קבועים בעולם האמיתי. צירוף אובייקט לעוגן עוזר לאובייקטים להיראות כאילו הם ממוקמים בצורה מציאותית בעולם האמיתי.
יצירת פעילות 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)