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

يصف Anchor موقعًا جغرافيًا ثابتًا واتجاهًا في العالم الحقيقي. يساعد ربط عنصر بنقطة ارتساء في عرض العناصر بشكل واقعي في العالم الحقيقي.

إنشاء جلسة ARCore for Jetpack XR

إنشاء نقاط ارتساء من خلال جلسة ARCore for Jetpack XR اطّلِع على فهم دورة حياة الجلسة للحصول على Session.

ضبط الجلسة

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

val newConfig = session.config.copy(
    anchorPersistence = Config.AnchorPersistenceMode.LOCAL,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureConfigurationNotSupported ->
        TODO(/* Some combinations of configurations are not valid. Handle this failure case. */)
    is SessionConfigureSuccess -> TODO(/* Success! */)
    else ->
        TODO(/* A different unhandled exception was thrown. */)
}

تثبيت المحتوى في موقع جغرافي ثابت

يتم إنشاء نقطة ارتساء باستخدام 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 واضبط العنصر الرئيسي على AnchorEntity.

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 طوال الجلسات

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

لإبقاء نقطة ارتكاز، استخدِم 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)