הסבר על עיבוד של מרחבים משניים

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

‫SubspaceModifier דומה למשתנה שינוי של Compose לפונקציות קומפוזביליות ב-Subspace. ‫SubspaceModifier מאפשר לכם לשנות רכיבים קומפוזביליים במרחב תלת-ממדי, וכך למקם, לסובב ולהוסיף התנהגויות לצמתים של פריסה תלת-ממדית.

פריסה

כברירת מחדל, Subspace מוגבל על ידי המרחב המומלץ לצפייה באפליקציה. הגבולות האלה משמשים למדידת הפריסה של רכיבי מרחב המשנה, בדומה לגבולות בפריסות של Compose בדו-ממד.

גבולות המילוי

התכונות fillMaxSize,‏ fillMaxWidth,‏ fillMaxHeight ו-fillMaxDepth גורמות לתוכן למלא (באופן חלקי) את הגבולות של רכיב ההורה שלו. שימוש ב-fill modifiers עוזר לאפליקציה לפרוס תוכן שלא תלוי במאפייני התצוגה של מכשיר ה-XR.

הגדרת הגודל בפועל והגודל הנדרש

המשתנים size,‏ width,‏ height ו-depth מגדירים את הגודל המועדף של התוכן. כדי להצהיר על הגודל המדויק של התוכן, משתמשים במאפיינים requiredSize,‏ requiredWidth,‏ requiredHeight ו-requiredDepth. צריך לציין את היחידות האלה ב-dp. כדי להמיר ממטרים ל-dp, משתמשים ב-Meter.toDp().

מיקום הרכיבים הקומפוזביליים

offset

המשתנה offset מעביר את הרכיב הניתן לקישור במרחב תלת-ממדי לאורך הצירים x,‏ y ו-z. צריך לציין את היחידות האלה ב-dp. כדי להמיר ממטרים ל-dp, משתמשים ב-Meter.toDp().

rotate

המשתנה rotate מסובב את ה-composable הנתון במרחב. אפשר לציין את כיוון הסיבוב ואת מידת הסיבוב בכמה דרכים:

  • באמצעות עלרוד, סבסוב וגלגול, שמציינים את הסיבוב סביב הצירים x, y ו-z בהתאמה,
  • באמצעות axisAngle, שהוא Vector3 שמייצג את ציר הסיבוב, ומספר המעלות שצריך לסובב סביבו,
  • באמצעות Quaternion שמייצג את הסיבוב.

rotateToLookAtUser

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

הזזה ושינוי הגודל של רכיבים קומפוזביליים

המשתמשים יכולים לשנות ישירות את המיקום והגודל של אובייקטים במרחב תלת-ממדי.

העברת רכיבים

כשהמשתנה movable קיים ומופעל, מוצגים רכיבים אינטראקטיביים שניתן לגרור, שמאפשרים למשתמש להזיז את האלמנט במרחב תלת-ממדי. אפשר להחיל משתני movable על Subspace שלם, על רכיבים של פריסה מרחבית (כמו SpatialRow ו-SpatialColumn) ועל רכיבים ספציפיים (כמו SpatialPanel ו-SpatialGltfModel).

ההתנהגות הספציפית של התנועה הזו מוגדרת על ידי movePolicy שסופק:

  • ‫MovePolicy.Default (או MovePolicy.system()): המערכת מטפלת בתנועה באופן מלא, ומחשבת ומחילה באופן אוטומטי את התנוחה והקנה המידה החדשים על סמך הקלט של המשתמש.
  • MovePolicy.custom(): המערכת מחשבת את יעד ה-Pose על סמך הקלט, אבל לא מחילה אותו באופן אוטומטי על הרכיב המשויך. האפשרות הזו שימושית להגבלת התנועה או ליצירת תנועה בהתאמה אישית באפליקציה.
  • ‫MovePolicy.anchor(): מאפשר למשתמש להצמיד ולעגן את הרכיב הניתן להזזה למישורים שזוהו בעולם האמיתי.

רכיבי Anchor Composable

כדי לעגן רכיב קומפוזבילי של מרחב משנה שניתן להזזה למשטחים בעולם האמיתי, מעבירים את MovePolicy.anchor() ל-modifier‏ movable. המדיניות הזו מאפשרת למשתמשים להצמיד רכיבים (כמו SpatialPanel ו-SpatialGltfModel) למשטחים פיזיים כמו שולחנות, קירות או רצפות.

אתם יכולים להשתמש בפרמטרים הבאים כדי לסנן את המישורים שזוהו, כך שרכיב יוכל להיצמד רק אליהם (אם משאירים את הפרמטרים ריקים, הרכיב יכול לעגון בכל מישור שזוהה):

  • ‫anchorPlaneOrientations: קבוצה של ערכי PlaneOrientation (Horizontal,‏ Vertical או Any).
  • ‫anchorPlaneSemantics: קבוצה של ערכי PlaneSemantic (Wall,‏ Floor,‏ Ceiling,‏ Table או Any).

שינוי הגודל של רכיבים

כשהמשתנה resizable() קיים ומופעל, יוצגו רכיבים אינטראקטיביים שמאפשרים למשתמש לשנות את גודל הרכיב במרחב תלת-ממדי. ההתנהגות הספציפית של שינוי הגודל מוגדרת על ידי הערך שצוין ב-resizePolicy:

  • ‫ResizePolicy.default(): המערכת מטפלת באופן אוטומטי בתנועת שינוי הגודל ומחילה את המידות החדשות על התוכן.
  • ‫ResizePolicy.custom(): המערכת מספקת SpatialResizeEvent ולא מחילה באופן אוטומטי את התוצאה של שינוי הגודל על הרכיב המשויך.

שינוי המראה של הרכיבים הקומפוזביליים

alpha

המשתנה alpha מגדיר את האטימות של הרכיב ושל הצאצאים שלו, כאשר 0f מייצג שקיפות מלאה ו-1.0f מייצג אטימות מלאה.

scale

המשתנה scale משנה את קנה המידה של התוכן של הרכיב הניתן לTex לאורך הצירים האופקיים, האנכיים והעומק.

בדיקות ונגישות

semantics

המשתנה semantics מוסיף סמנטיקה לצומת הפריסה, לשימוש בבדיקות ובנגישות. מידע נוסף זמין במאמרים סמנטיקה ב-Jetpack Compose ו-SemanticsModifier.

testTag

המשתנה testTag הוא קיצור של SemanticsPropertyReceiver.testTag, שמאפשר למסגרות בדיקה למצוא את הרכיב בבדיקות.