إنشاء نقاط تثبيت باستخدام ARCore لإطار عمل Jetpack XR

أجهزة XR المشمولة
تساعدك هذه الإرشادات في إنشاء تجارب لهذه الأنواع من أجهزة XR.
سماعات الرأس بنظام الواقع الممتد
نظارات سلكية بنظام الواقع الممتد

يصف "الإعلان الثابت" موقعًا واتجاهًا ثابتَين في العالم الحقيقي. ويساعد إرفاق عنصر بإعلان ثابت في ظهور العناصر بشكل واقعي في العالم الحقيقي.

الوصول إلى جلسة

يمكنك إنشاء إعلانات ثابتة من خلال ARCore for Jetpack XR Session. إذا كنت تعمل على تحسين واجهة المستخدم المكانية باستخدام Jetpack Compose for XR، يمكنك الوصول إلى جلسة من Jetpack Compose for XR. إذا كنت تعمل على استخدام الكيانات المكانية من مكتبة Jetpack SceneCore، يمكنك الوصول إلى جلسة من Jetpack XR Runtime.

ضبط الجلسة

لا يتطلّب إنشاء الإعلانات الثابتة وتحميلها ضبط الجلسة. ومع ذلك، لا يكون خيار الاحتفاظ بالإعلانات الثابتة مفعّلاً تلقائيًا في جلسات XR. للاحتفاظ بالإعلانات الثابتة وتحميلها من مساحة التخزين المحلية، عليك ضبط الجلسة وتعيين الوضع AnchorPersistenceMode.LOCAL:

val newConfig = Config.Builder(session.config)
    .setAnchorPersistence(AnchorPersistenceMode.LOCAL)
    .build()
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    else ->
        TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */)
}

إرفاق المحتوى بالإعلان الثابت في موقع ثابت في المساحة

يتم إنشاء إعلان ثابت باستخدام Pose يمكن تفسيره بالنسبة إلى Anchorable حالي أو لا. Anchorable هو Trackable يمكن إرفاق إعلانات ثابتة به.

إنشاء إعلان ثابت بالنسبة إلى Anchorable

عند إنشاء إعلان ثابت بالنسبة إلى Anchorable، مثل Plane، يجعل ذلك الإعلان الثابت يتتبّع Anchorable المرفق عند تحرّكه في المساحة.

val anchor = plane.createAnchor(pose)

إنشاء إعلان ثابت بدون Anchorable

لإنشاء إعلان ثابت غير مرفق بـ Anchorable، اتّبِع الخطوات التالية:

val anchor = Anchor.create(session, pose)

إرفاق كيان بإعلان ثابت

لعرض نموذج في هذا الموقع، أنشئ GltfModel واضبط العنصر الرئيسي على AnchorSpace.

AnchorEntity.create(session, anchor).apply {
    parent = session.scene.activitySpace
    addChild(entity)
}

فهم TrackingState

يحتوي كل Trackable على TrackingState يجب التحقّق منه قبل استخدامه. يتم تعديل Pose بشكل نشط بواسطة النظام لـ Trackable الذي تكون قيمة TrackableState فيه هي Tracking. قد تصبح قيمة Trackable التي تم ضبطها على Paused هي Tracking في المستقبل، بينما لن تصبح قيمة Trackable التي تم ضبطها على Stopped هي Tracking أبدًا.

الاحتفاظ بإعلان ثابت خلال الجلسات

يختفي الإعلان الثابت الذي لم يتم الاحتفاظ به بعد إيقاف الجلسة. من خلال الاحتفاظ بإعلان ثابت، يتذكّر تطبيقك موضع هذا الإعلان الثابت في بيانات التطبيق الخاصة. يمكن استرداد هذا الإعلان الثابت في جلسة لاحقة ويتم تثبيته في الموقع نفسه في العالم.

للاحتفاظ بإعلان ثابت، استخدِم Anchor.persist() كما هو موضّح هنا:

val uuid = anchor.persist()

يمكن لتطبيقك استرداد الإعلان الثابت باستخدام الـ UUID في جلسة مستقبلية:

when (val result = Anchor.load(session, uuid)) {
    is AnchorCreateSuccess -> {
        // Loading was successful. The anchor is stored in result.anchor.
    }
    else -> {
        // handle failure
    }
}

عندما لا تعود بحاجة إلى إعلان ثابت، استخدِم unpersist(). يزيل هذا الإعلان الثابت من مساحة تخزين تطبيقك ويجعل `UUID` المحدّد غير قابل للاسترداد عند استدعاء Anchor.load().

Anchor.unpersist(session, uuid)

يمكن لتطبيقك أيضًا طلب قائمة بجميع الإعلانات الثابتة التي تم الاحتفاظ بها والتي لا تزال موجودة في مساحة تخزين تطبيقك:

val uuids = Anchor.getPersistedAnchorUuids(session)