إضافة مساحة فرعية تتبع هدفًا

أجهزة XR المشمولة
تساعدك هذه الإرشادات في إنشاء تجارب لهذه الأنواع من أجهزة 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>

اطلب الآن الأذونات. لمزيد من المعلومات، يمكنك مراجعة مبادئ الأذونات وسير العمل للتأكّد من تقديم أفضل تجربة للمستخدمين، مثل التحقّق مما إذا كان المستخدم قد منح أذونات التشغيل التي يتطلّبها تطبيقك وما إذا كان يجب أن يعرض تطبيقك سببًا للمستخدم قبل طلب هذا الإذن.

ضبط إعدادات الجلسة

بعد ذلك، عليك ضبط الجلسة التي يتم إنشاؤها لتطبيقك عند استخدام Jetpack Compose for XR من خلال ضبط DeviceTrackingMode.SPATIAL:

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: يتتبّع المحتوى حركة المستخدم على الفور بأقل قدر من التأخير، ما يحافظ على ارتباط المحتوى بحركته بشكل وثيق.

تتيح لك جميع أوضاع التتبُّع اختيار أبعاد الحركة التي يتم تتبُّعها من بين الخيارات التالية:

  • المحور س
  • المحور ص
  • الاقتراح
  • اللفافة
  • الانحراف
  • ‫RotationOnly: تتيح لك تحديد قيمة واحدة لتتبُّع السمات المرتبطة بالدوران (الميل والانحراف والتدحرج).

يمكنك اختيار أي مجموعة من هذه السمات، أو استخدام القيمة التلقائية TrackedDimensions.All التي تتتبّعها جميعًا.

إضافة مساحة فرعية تتبع ميزة بيئية

لإضافة مساحة فرعية تثبّت المحتوى المكاني بدقة على عنصر مادي في بيئة المستخدم، استخدِم FollowTarget.anchor(). استخدِم هذا النوع من الأهداف لتتبُّع سطح مستوٍ تم رصده أو نقطة ارتساء أو موقع جغرافي مكاني.

يتطلّب تتبُّع الميزات الواقعية أذونات إضافية وإعدادات للجلسة حسب الميزة التي تتابعها.

للحصول على تعليمات مفصّلة حول التعامل مع إمكانات الإدراك لميزات ARCore، بالإضافة إلى إعداد الأذونات اللازمة وضبط جلستك لاستخدام FollowTarget.anchor()، يُرجى الاطّلاع على مستندات حزمة تطوير البرامج (SDK) لـ Jetpack XR حول الأسطح ونقاط الارتكاز والوضعيات الجغرافية المكانية.

ينشئ المثال التالي مساحة فرعية تتبع نقطة ارتساء حقيقية:

// 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 لتقريب واجهة المستخدم المحيطية (مثل شاشة العرض الرأسية (HUD)) أو إبعادها على المحور Z، أو نقلها إلى حواف رؤية المستخدم.
  2. تقييد الأحجام: يمكنك تطبيق عناصر تعديل مثل requiredSizeIn لتقييد المربّعات المحيطة بالمساحات.

لمزيد من المعلومات حول مساحات الإحداثيات وقيود التنسيق وجميع إعدادات التتبُّع المتاحة، يُرجى الاطّلاع على مستندات مرجع Subspace.