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

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