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

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

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

برای اطلاعات بیشتر درباره چیدمان‌های فضایی و مؤلفه‌هایی که می‌توانید در زیرفضا استفاده کنید، به مؤلفه‌های فضایی‌شده مراجعه کنید.

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

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 ببینید.