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

دستگاه‌های XR قابل اجرا
این راهنما به شما کمک می‌کند تا برای این نوع دستگاه‌های XR تجربه ایجاد کنید.
هدست‌های XR
عینک‌های XR سیمی

یک زیرفضا (subspace) یک پارتیشن از فضای سه‌بعدی درون برنامه شماست که می‌توانید مدل‌های سه‌بعدی را در آن قرار دهید، طرح‌بندی‌های سه‌بعدی بسازید و به محتوای دوبعدی عمق اضافه کنید. یک زیرفضا فقط زمانی رندر می‌شود که قابلیت فضایی‌سازی فعال باشد. در فضای خانگی (Home Space) یا در دستگاه‌های غیر XR، هر کدی که درون آن زیرفضا باشد نادیده گرفته می‌شود.

شما می‌توانید از کامپوننت‌های subspace مانند SpatialPanel ، SpatialRow و SpatialColumn برای ایجاد طرح‌بندی خود و قرار دادن محتوای دوبعدی در فضای سه‌بعدی استفاده کنید. برای قرار دادن محتوای سه‌بعدی، از Subspace Composable مناسب مانند SceneCoreEntity برای مدل‌های سه‌بعدی و SpatialExternalSurface برای تصاویر استریو استفاده کنید. برخی از کامپوننت‌های XR مانند Orbiter یا SpatialDialog کامپوننت‌های استاندارد دوبعدی هستند که می‌توانند در هر جایی از سلسله مراتب رابط کاربری دوبعدی شما استفاده شوند، اما یک SubspaceComposable باید در subspace برنامه شما فراخوانی شود. برای انجام این کار، از Subspace Composable استفاده کنید.

درباره سلسله مراتب زیرفضاها

Subspace سطح بالا، بیرونی‌ترین زیرفضای فراخوانی شده توسط برنامه شماست. هر فراخوانی به یک Subspace ، یک سلسله مراتب رابط کاربری فضایی جدید و مستقل ایجاد می‌کند. این زیرفضا، موقعیت مکانی، جهت‌گیری یا مقیاس هیچ Subspace والدی را که در آن قرار دارد، به ارث نمی‌برد.

برای ایجاد یک Subspace توکار یا تو در تو درون SpatialPanel ، Orbiter ، SpatialPopup یا کامپوننت‌های دیگر، از PlanarEmbeddedSubspace استفاده کنید.

PlanarEmbeddedSubspace دو تفاوت کلیدی با Subspace دارد:

  • آنها در طرح دوبعدی که در آن فراخوانی می‌شوند، شرکت می‌کنند. این بدان معناست که ارتفاع و عرض زیرفضا توسط ارتفاع و عرض طرح دوبعدی والد آن محدود خواهد شد.
  • آنها مانند فرزندان موجودیتی که در آن فراخوانی می‌شوند رفتار می‌کنند. این بدان معناست که اگر یک زیرفضای composable را که درون یک SpatialPanel تودرتو قرار دارد، فراخوانی کنید، آن زیرفضا فرزند SpatialPanel ای است که در آن فراخوانی شده است.

این رفتارهای PlanarEmbeddedSubspace قابلیت‌هایی مانند موارد زیر را فراهم می‌کند:

  • جابجایی فرزند با نهاد والد
  • جابجایی مکان فرزند با استفاده از offset SubspaceModifier
  • ارائه یک شیء سه‌بعدی که بالای رابط کاربری دوبعدی شما قرار می‌گیرد و با ارتفاع و عرض فضای مناسب در طرح دوبعدی مطابقت دارد

تطبیق طرح‌بندی‌ها برای یک زیرفضا

در اندروید XR، طرح‌بندی برنامه شما به طور پیش‌فرض در حالت Full Space به VolumeConstraints مربوط به Subspace محدود می‌شود. به همین دلیل، باید میزان فضای قابل مشاهده برای کاربر را در نظر بگیرید و طرح‌بندی خود را بر اساس آن تنظیم کنید. recommendedContentBoxInFullSpace ابعاد خاصی را برای کادر محصورکننده درون ActivitySpace فراهم می‌کند تا محتوا بتواند در میدان دید کاربر قرار گیرد.

محتوای اصلی برنامه شما باید در این کادر قرار گیرد. اگر محتوایی دارید که باید از مرزهای توصیه‌شده فراتر رود، طرح‌بندی‌ای را در نظر بگیرید که کاربران را تشویق کند با حرکت سرشان فضا را کاوش کنند. محدودیت پیش‌فرض recommendedContentBoxInFullSpace را می‌توان با اعمال یک اصلاح‌کننده سفارشی مبتنی بر اندازه مانند SubspaceModifier.requiredSizeIn لغو کرد. برای رفتار نامحدود، allowUnboundedSubspace = true قرار دهید.

برای دریافت این ابعاد خاص در صورت نیاز، با استفاده از Session فعلی، تابع recommendedContentBoxInFullSpace را فراخوانی کنید. به مثال زیر توجه کنید:

val session = LocalSession.current
session?.scene?.activitySpace?.recommendedContentBoxInFullSpace

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

مثال کد زیر نحوه اضافه کردن Subspace و PlanarEmbeddedSubspace را به برنامه شما نشان می‌دهد:

setContent {
    // This is a top-level subspace
    Subspace {
        SpatialPanel {
            MyComposable()
        }
    }
}

@Composable
private fun MyComposable() {
    Row {
        PrimaryPane()
        SecondaryPane()
    }
}

@Composable
private fun PrimaryPane() {
    // This is an embedded subspace, because PrimaryPane is in a SpatialPanel
    // and that SpatialPanel is in the top-level Subspace
    PlanarEmbeddedSubspace {
        SpatialPanel {}
    }
}

برای جزئیات بیشتر به مستندات مرجع کامل در مورد Subspace و PlanarEmbeddedSubspace مراجعه کنید.