فضای فرعی پارتیشنی از فضای سه بعدی در برنامه شما است که می توانید مدل های سه بعدی را قرار دهید، طرح بندی های سه بعدی بسازید و به محتوای دو بعدی در غیر این صورت عمق دهید. یک فضای فرعی تنها زمانی ارائه می شود که فضایی سازی فعال باشد. در Home Space یا در دستگاههای غیر XR، هر کدی در آن زیرفضا نادیده گرفته میشود.
برای قرار دادن مدل های سه بعدی می توانید از @SubspaceComposable
مانند Volume
و SpatialPanel
استفاده کنید. برخی از مؤلفههای XR مانند Orbiter
s یا SpatialDialog
s قابلیتهای ترکیبپذیر دوبعدی استانداردی هستند که میتوانند در هر نقطه از سلسله مراتب UI 2 بعدی شما استفاده شوند، اما SubspaceComposable
باید در فضای فرعی برنامه شما فراخوانی شود. برای این کار از Subspace
composable استفاده خواهید کرد.
مانند هر کامپوزیتی دیگری، میتوانید Subspace
مستقیماً در سلسله مراتب UI دوبعدی خود فراخوانی کنید. با این حال، مهم است که از پیامدهای این که در کجای سلسله مراتب Subspace
فراخوانی می کنید، آگاه باشید.
درباره سلسله مراتب زیرفضا
زیرفضای سطح بالا، بیرونی ترین فضای فرعی است که توسط برنامه شما فراخوانی شده است. این زیرفضا عملاً محدودههای بینهایتی دارد و معمولاً جایی است که طرح فضایی برنامه و SpatialPanel
را در آن قرار میدهید.
با این حال، اگر فضای فرعی دیگری را در یک سلسله مراتب رابط کاربری دوبعدی در پانلی که در زیرفضای سطح بالا قرار دارد، قرار دهید، آن زیرفضای تو در تو متفاوت رفتار می کند.
فضاهای فرعی تو در تو دو تفاوت اساسی با Subspace
سطح بالا دارند:
- آنها در طرح دو بعدی که در آن فراخوانی می شوند شرکت می کنند. این بدان معنی است که ارتفاع و عرض زیرفضا با ارتفاع و عرض طرح والد دوبعدی آن محدود می شود.
- آنها بهعنوان فرزندان موجودیتی رفتار میکنند که در آن فراخوانی شدهاند. این به این معنی است که اگر شما یک
Subspace
که در داخلSpatialPanel
تودرتو ساخته شده است صدا بزنید، آن زیرفضا فرزندSpatialPanel
خواهد بود که فراخوانی میشود.
این رفتارهای زیرفضای تو در تو، قابلیت هایی مانند:
- جابجایی کودک با نهاد والد
- تنظیم موقعیت کودک با استفاده از Offset
SubspaceModifier
- ارائه یک شی 3 بعدی که بالای رابط کاربری 2 بعدی شما قرار دارد و با ارتفاع و عرض فضای مناسب در چیدمان دو بعدی مطابقت دارد.
یک فضای فرعی به برنامه خود اضافه کنید
مثال کد زیر نحوه افزودن زیرفضاهای سطح بالا و تو در تو را به برنامه خود نشان می دهد.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
// This is a top-level subspace
Subspace {
SpatialPanel {
MyComposable()
}
}
}
}
@Composable
private fun MyComposable() {
Row {
PrimaryPane()
SecondaryPane()
}
}
@Composable
private fun PrimaryPane() {
...
// This is a nested subspace, because PrimaryPane is in a SpatialPanel
// and that SpatialPanel is in a top-level Subspace
Subspace {
ObjectInAVolume(show3DObject)
}
...
}