הוספת תת-מרחב לאפליקציה

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

תת-מרחב הוא חלוקה של מרחב תלת-ממדי בתוך האפליקציה, שבה אפשר למקם מודלים תלת-ממדיים, ליצור פריסות תלת-ממדיות ולהוסיף עומק לתוכן דו-ממדי. מרחב משנה מוצג רק אם הופעל אודיו מרחבי. במרחב הביתי או במכשירים שאינם XR, כל קוד בתוך תת-המרחב הזה מוזנח.

אפשר להשתמש ברכיבי UI שניתנים להרכבה במרחב משנה כמו SpatialPanel,‏ SpatialRow ו-SpatialColumn כדי ליצור את הפריסה ולמקם תוכן דו-ממדי במרחב תלת-ממדי. כדי למקם תוכן תלת-ממדי, צריך להשתמש ברכיב Subspace Composable המתאים, כמו SceneCoreEntity למודלים תלת-ממדיים ו-SpatialExternalSurface לתמונות סטריאו. חלק מרכיבי ה-XR, כמו Orbiter או SpatialDialog, הם רכיבים סטנדרטיים של 2D שאפשר להשתמש בהם בכל מקום בהיררכיית ממשק המשתמש של 2D, אבל צריך להפעיל את SubspaceComposable במרחב המשנה של האפליקציה. כדי לעשות את זה, משתמשים בקוד Subspace קומפוזבילי של תת-מרחב.

מידע על היררכיות של תת-מרחבים

הרמה העליונה Subspace היא המרחב המשני החיצוני ביותר שהאפליקציה מפעילה. כל קריאה ל-Subspace יוצרת היררכיית ממשק משתמש מרחבי חדשה ועצמאית. הוא לא מקבל בירושה את המיקום המרחבי, הכיוון או קנה המידה של אף רכיב הורה Subspace שהוא מוטמע בתוכו.

כדי ליצור Subspace מוטמע או מקונן בתוך SpatialPanel, Orbiter,‏ SpatialPopup או רכיב אחר, משתמשים ב-PlanarEmbeddedSubspace.

יש שני הבדלים עיקריים בין PlanarEmbeddedSubspace לבין Subspace:

  • הם משתתפים בפריסה הדו-ממדית שבה הם מופעלים. המשמעות היא שהגובה והרוחב של המרחב המשני יהיו מוגבלים על ידי הגובה והרוחב של פריסת ההורה הדו-ממדית שלו.
  • הם מתנהגים כמו צאצאים של הישות שבה הם מופעלים. כלומר, אם קוראים לתת-מרחב שניתן להרכבה ומקונן בתוך SpatialPanel, תת-המרחב הזה הוא צאצא של SpatialPanel שהוא נקרא בו.

ההתנהגויות האלה של PlanarEmbeddedSubspace מאפשרות יכולות כמו:

  • העברת הצאצא עם ישות האב
  • הזזת המיקום של הילד באמצעות ההזזה SubspaceModifier
  • הצגת אובייקט תלת-ממדי שמרחף מעל ממשק המשתמש הדו-ממדי ומתאים לגובה ולרוחב של המרחב המתאים בפריסה הדו-ממדית

התאמת פריסות למרחב משנה

ב-Android XR, פריסת האפליקציה קשורה לVolumeConstraints של Subspace במצב מסך מלא כברירת מחדל. לכן, כדאי לקחת בחשבון את כמות השטח הגלוי שזמין למשתמש ולהתאים את הפריסה בהתאם. התג recommendedContentBoxInFullSpace מספק את המידות הספציפיות של תיבת התוחמת בתוך התג ActivitySpace, כדי שיהיה אפשר למקם את התוכן בתוך שדה הראייה של המשתמש.

התוכן העיקרי של האפליקציה צריך להיכנס לתיבה הזו. אם יש לכם תוכן שחייב לחרוג מהגבולות המומלצים, כדאי לשקול פריסה שמעודדת את המשתמשים לחקור את המרחב על ידי הזזת הראש. אפשר לבטל את אילוץ ברירת המחדל של recommendedContentBoxInFullSpace על ידי החלת מגביל מותאם אישית לפי גודל, כמו SubspaceModifier.requiredSizeIn. כדי להגדיר התנהגות ללא הגבלה, מגדירים את הערך allowUnboundedSubspace = true.

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

val session = LocalSession.current
session?.scene?.activitySpace?.recommendedContentBoxInFullSpace

הוספת מרחב משנה לאפליקציה

בדוגמת הקוד הבאה אפשר לראות איך מוסיפים את Subspace ואת PlanarEmbeddedSubspace לאפליקציה:

setContent {
    // This is a top-level subspace
    Subspace {
        SpatialPanel {
            MyComposable()
        }
    }
}

@Composable
private fun MyComposable() {
    Row {
        PrimaryPane()
        SecondaryPane()
    }
}

@Composable
private fun PrimaryPane() {
    // This is an embedded subspace, because PrimaryPane is in a SpatialPanel
    // and that SpatialPanel is in the top-level Subspace
    PlanarEmbeddedSubspace {
        SpatialPanel {}
    }
}

פרטים נוספים מופיעים במאמרי העזרה המלאים בנושא Subspace ו-PlanarEmbeddedSubspace.