یک فضای فرعی به برنامه خود اضافه کنید

فضای فرعی پارتیشنی از فضای سه بعدی در برنامه شما است که می توانید مدل های سه بعدی را قرار دهید، طرح بندی های سه بعدی بسازید و به محتوای دو بعدی در غیر این صورت عمق دهید. یک فضای فرعی تنها زمانی ارائه می شود که فضایی سازی فعال باشد. در 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)
    }
}