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

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

درحالی‌که Subspace استاندارد در موقعیت ثابتی که توسط سیستم تعیین می‌شود باقی می‌ماند، گاهی ممکن است بخواهید واسط کاربر فضایی برنامه‌تان به‌صورت پویا با کاربر حرکت کند یا به مکان خاصی در محیط خود یا در دنیای واقعی متصل بماند. می‌توانید FollowTarget را به پارامتر follow Subspace ارسال کنید تا تجربه‌هایی مانند نمایشگرهای هاد (HUD) قفل‌شده روی سر یا پانل‌های اطلاعاتی متصل به اشیای دنیای واقعی بسازید.

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

برای افزودن زیرفضایی که نسبت‌به میدان دید کاربر قرار گرفته است، از FollowTarget.view استفاده کنید. بسته به حالت دنبال کردن که مشخص می‌کنید، این ویژگی به شما امکان می‌دهد حرکات سر کاربر را به‌طور مداوم ردیابی کنید یا محتوا را به‌صورت ایستا براساس جایی که کاربر نگاه می‌کند قرار دهید. می‌توانید از این مورد برای چیزهایی مثل نمایشگر هاد (HUD)، اعلان‌های دائمی، یا کنترل‌های کنش سریع استفاده کنید.

اعلام و درخواست اجازه‌ها

پیش‌از درخواست اجازه‌ها، باید آن‌ها را در مانیفست برنامه‌تان بااستفاده از عنصر <uses-permission> اعلام کنید.

<manifest ...>
    <!-- Only declare permissions that your app actually needs. In this example,
    we declare permissions for head tracking. -->
    <uses-permission android:name="android.permission.HEAD_TRACKING"/>
    <application ...>
        ...
    </application>
</manifest>

اکنون اجازه‌ها را درخواست کنید. برای اطلاعات بیشتر، اصول و گردش کار اجازه را مرور کنید تا مطمئن شوید بهترین تجربه را برای کاربران خود فراهم می‌کنید، مثلاً بررسی اینکه آیا کاربر قبلاً اجازه‌های زمان اجرا را که برنامه شما نیاز دارد اعطا کرده است و آیا برنامه شما باید قبل‌از درخواست این اجازه، منطقی را به کاربر نشان دهد.

پیکربندی جلسه

سپس، با تنظیم DeviceTrackingMode.SPATIAL، جلسه برنامه‌تان را که هنگام استفاده از Jetpack Compose برای XR برای شما ایجاد شده است پیکربندی خواهید کرد:

val session = checkNotNull(LocalSession.current)
session.configure(
    config = Config.Builder(session.config).setDeviceTracking(DeviceTrackingMode.SPATIAL)
        .build()
)

ایجاد زیرفضا

درنهایت، یک زیرفضا ایجاد خواهید کرد که نمای کاربر را هدف قرار می‌دهد، همراه با یک حالت دنبال کردن:

// Example: A subspace that softly follows the user's view (like a HUD)
Subspace(
    follow = FollowTarget.view(
        // Customizing the soft follow to move slightly faster and tracking all dimensions
        mode = FollowMode.soft(
        )
    ),
    modifier = modifier,
) {
    SpatialPanel {
      // SpatialPanel Content
    }
}

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

وقتی از FollowTarget.view به‌عنوان هدف استفاده می‌کنید، می‌توانید با مشخص کردن FollowMode، نحوه رفتار محتوا را سفارشی‌سازی کنید:

  • FollowMode.soft: محتوا به‌تدریج به حرکات هدف می‌رسد و جلوه شناور همواری ایجاد می‌کند.
  • FollowMode.snap: محتوا یک‌بار براساس حالت نمای اولیه کاربر در جلوی او قرار می‌گیرد و پس‌از آن ثابت می‌ماند.
  • FollowMode.tight: محتوا نمای کاربر را بلافاصله با حداقل تأخیر ردیابی می‌کند و محتوا را به‌طور دقیق به حرکت کاربر متصل نگه می‌دارد.

همه حالت‌های دنبال کردن به شما امکان می‌دهند انتخاب کنید کدام ابعاد حرکت از گزینه‌های زیر ردیابی شود:

  • محور X
  • محور Y
  • زیر و بمی صدا
  • تاس انداختن
  • انحراف از مسیر
  • RotationOnly: به شما امکان می‌دهد مقدار واحدی را برای ردیابی ابعاد مربوط به چرخش (پیچ، یاو، و رول) مشخص کنید.

می‌توانید هر ترکیبی از این ابعاد را انتخاب کنید یا از مقدار پیش‌فرض TrackedDimensions.All استفاده کنید که همه آن‌ها را ردیابی می‌کند.

افزودن زیرفضایی که از ویژگی محیطی پیروی می‌کند

برای افزودن زیرفضایی که محتوای فضایی را دقیقاً به ویژگی فیزیکی در محیط کاربر قفل می‌کند، از FollowTarget.anchor() استفاده کنید. از این نوع هدف برای دنبال کردن صفحه تشخیص‌داده‌شده، لنگر، یا مکان زمین‌مکانی استفاده کنید.

ردگیری ویژگی‌های دنیای واقعی به اجازه‌ها و پیکربندی‌های جلسه اضافی نیاز دارد که به ویژگی‌ای که دنبال می‌کنید بستگی دارد.

برای دستورالعمل‌های دقیق درباره کار با قابلیت‌های ادراک برای ویژگی‌های ARCore، و همچنین راه‌اندازی اجازه‌های لازم و پیکربندی جلسه برای استفاده از FollowTarget.anchor()، به اسناد Jetpack XR SDK برای Planes،‏ Anchors، و Geospatial poses مراجعه کنید.

مثال زیر زیرفضایی را ایجاد می‌کند که از لنگر دنیای واقعی پیروی می‌کند:

// A subspace locked to a real-world anchor
Subspace(
    follow = FollowTarget.anchor(anchor = myAnchor)
) {
    // Rotate the panel to ensure it faces the user while remaining anchored
    SpatialPanel(SubspaceModifier.rotateToLookAtUser()) {
      // SpatialPanel Content
    }
}

اجتناب از هم‌پوشانی فضایی

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

برای جلوگیری از تداخل نمایشگر هاد (HUD) قفل‌شده روی سر با پانل‌های نقطه موردعلاقه (POI) لنگرانداخته‌شده (Z-fighting)، حجم‌های چیدمان را به‌طور صریح بااستفاده از این روش‌ها مدیریت کنید:

  1. استفاده از افست‌ها: از SubspaceModifier.offset برای نزدیک‌تر یا دورتر کردن واسط کاربر جانبی (مانند نمایشگر هاد) در محور Z یا انتقال آن به لبه‌های دید کاربر استفاده کنید.
  2. محدود کردن اندازه‌ها: اصلاح‌کننده‌هایی مثل requiredSizeIn را برای محدود کردن چارگوش‌های مرزی فضاهایتان اعمال کنید.

برای اطلاعات بیشتر درباره فضاهای مختصات، محدودیت‌های چیدمان، و همه پیکربندی‌های ردیابی دردسترس، به اسناد مرجع Subspace مراجعه کنید.