فضای فرعی پارتیشنی از فضای سه بعدی در برنامه شما است که می توانید مدل های سه بعدی را قرار دهید، طرح بندی های سه بعدی بسازید و به محتوای دو بعدی در غیر این صورت عمق دهید. یک فضای فرعی تنها زمانی ارائه می شود که فضایی سازی فعال باشد. در Home Space یا در دستگاههای غیر XR، هر کدی در آن زیرفضا نادیده گرفته میشود.
برای قرار دادن مدلهای سهبعدی میتوانید از قابلیتهای composable subspace مانند Volume
و SpatialPanel
استفاده کنید. برخی از مؤلفههای XR مانند Orbiter
یا SpatialDialog
قابلیتهای ترکیبپذیر دوبعدی استانداردی هستند که میتوانند در هر جایی از سلسلهمراتب UI دوبعدی شما استفاده شوند، اما SubspaceComposable
باید در فضای فرعی برنامهتان فراخوانی شود. برای این کار از ApplicationSubspace
composable یا Subspace
composable استفاده کنید.
همانطور که از نام آن پیداست، ApplicationSubspace
composable باید شامل تمام محتوای فضایی برنامه شما باشد. Subspace
composable برای قرار دادن پارتیشنی از فضای سه بعدی عمیق تر در سلسله مراتب رابط کاربری موجود برنامه شما ایده آل است.
مانند هر کامپوزیتی دیگری، میتوانید Subspace
مستقیماً در سلسله مراتب UI دوبعدی خود فراخوانی کنید. با این حال، مهم است که از پیامدهای این که در کجای سلسله مراتب Subspace
را فراخوانی می کنید، آگاه باشید.
درباره سلسله مراتب زیرفضا
زیرفضای سطح بالا، بیرونی ترین فضای فرعی است که توسط برنامه شما فراخوانی شده است. از ApplicationSubspace
قابل composable برای زیرفضای سطح بالای خود استفاده کنید، اما، اگر فقط از Subspace قابل composable در برنامه خود استفاده کنید، بیرونی ترین Subspace
قابل ترکیب، زیرفضای سطح بالای شما خواهد بود. بهطور پیشفرض، این زیرفضای سطح بالا با فضای توصیهشده برای مشاهده یک برنامه محدود میشود، و معمولاً جایی است که طرحبندی فضایی برنامه و SpatialPanel
قرار میدهید. اگر میخواهید محدودههای زیرفضای سطح بالا را تغییر دهید، [ VolumeConstraints
][VolumeConstraints] را به ApplicationSubspace
خود منتقل کنید.
با این حال، اگر فضای فرعی دیگری را در یک سلسله مراتب رابط کاربری دوبعدی در پانلی که در زیرفضای سطح بالا قرار دارد، قرار دهید، آن زیرفضای تو در تو متفاوت رفتار می کند.
فضاهای فرعی تو در تو دو تفاوت اساسی با Subspace
سطح بالا دارند:
- آنها در طرح دو بعدی که در آن فراخوانی می شوند شرکت می کنند. این بدان معنی است که ارتفاع و عرض زیرفضا با ارتفاع و عرض طرح والد دوبعدی آن محدود می شود.
- آنها مانند فرزندان موجودیتی که در آن فراخوانی شده اند رفتار می کنند. این به این معنی است که اگر شما یک
Subspace
که در داخل یکSpatialPanel
تودرتو ساخته شده است صدا کنید، آن زیرفضا فرزندSpatialPanel
است که فراخوانی می شود.
این رفتارهای زیرفضای تو در تو، قابلیت هایی مانند:
- جابجایی کودک با نهاد والد
- تنظیم موقعیت کودک با استفاده از Offset
SubspaceModifier
- ارائه یک شی 3 بعدی که بالای رابط کاربری 2 بعدی شما قرار دارد و با ارتفاع و عرض فضای مناسب در چیدمان دو بعدی مطابقت دارد.
یک فضای فرعی به برنامه خود اضافه کنید
مثال کد زیر نحوه افزودن زیرفضاهای سطح بالا و تودرتو به برنامه خود را نشان می دهد:
setContent { // This is a top-level subspace ApplicationSubspace { 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(true) } }