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

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

فضای فرعی بخشی از فضای سه‌بعدی درون برنامه شما است که می‌توانید در آن مدل‌های سه‌بعدی قرار دهید، چیدمان‌های سه‌بعدی بسازید، و به محتوای دوبعدی عمق اضافه کنید. زیرفضا فقط زمانی پرداز می‌شود که فضاسازی فعال باشد. در «فضای خانه» یا در دستگاه‌های غیر XR، هر کدی در آن زیرفضا نادیده گرفته می‌شود.

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

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

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

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

‫PlanarEmbeddedSubspace دو تفاوت اساسی با Subspace دارد:

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

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

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

تطبیق دادن چیدمان‌ها برای فضای فرعی

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

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

بااستفاده از جلسه کنونی با 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 را ببینید.