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

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

إنشاء جلسة ARCore لتطبيق Jetpack XR

أنشئ نقاط تثبيت من خلال جلسة ARCore لتطبيق Jetpack XR. اطّلِع على مقالة فهم رحلة جلسة للحصول على Session.

ضبط الجلسة

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

val newConfig = session.config.copy(
    anchorPersistence = Config.AnchorPersistenceMode.Enabled,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureConfigurationNotSupported ->
        TODO(/* Some combinations of configurations are not valid. Handle this failure case. */)
    is SessionConfigurePermissionsNotGranted ->
        TODO(/* The required permissions in result.permissions have not been granted. */)
    is SessionConfigureSuccess -> TODO(/* Success! */)
}

تثبيت المحتوى في مكان ثابت في المساحة

يتم إنشاء عنصر ربط باستخدام Pose، والذي يمكن تفسيره بالنسبة إلى Trackable حالي أو لا.

إنشاء عنصر ربط بالنسبة إلى عنصر قابل للتتبّع

عند إنشاء عنصر تثبيت بالنسبة إلى Trackable، مثل Plane، مما يؤدي إلى تتبُّع عنصر التثبيت للعنصر Trackable المُرفَق عند تنقّله في المساحة

when (val result = trackable.createAnchor(pose)) {
    is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ }
    else -> { /* handle failure */ }
}

إنشاء عنصر ربط بدون عنصر قابل للتتبّع

لإنشاء عنصر تثبيت غير مرتبط بعنصر Trackable:

when (val result = Anchor.create(session, pose)) {
    is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ }
    else -> { /* handle failure */ }
}

إرفاق عنصر بعنصر أساسي

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

AnchorEntity.create(session, anchor).apply {
    setParent(session.activitySpace)
    addChild(entity)
}

فهم TrackingState

يحتوي كل Trackable على TrackingState يجب التحقّق منه قبل استخدامه. إنّ Trackable التي لها TrackableState تبلغ Tracking يتم تعديل Pose الخاص بها بشكل نشط من قِبل النظام. قد يصبح Trackable الذي يُصنَّف على أنّه Paused Tracking في المستقبل، في حين أنّ 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)