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

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

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

אפשר להשתמש ברכיבים הניתנים להרכבה של תת-מרחב כמו 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.