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, שמאפשר למסגרות בדיקה למצוא את הרכיב בבדיקות.