ایجاد کردن لنگر با ARCore برای Jetpack XR

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

لنگر مکان و جهت را در دنیای واقعی توصیف می‌کند. پیوستن شیء به لنگر کمک می‌کند اشیا به‌صورت واقع‌گرایانه در دنیای واقعی قرار بگیرند و به برنامه شما کمک می‌کند با اجرا نکردن منطق در هر قاب، در مصرف انرژی صرفه‌جویی کند.

دسترسی به جلسه

ازطریق ARCore برای 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، مثل Plane، ایجاد می‌شود، این کار باعث می‌شود وقتی Anchorable پیوست‌شده در فضا حرکت می‌کند، نقطه اتکا آن را دنبال کند.

val anchor = plane.createAnchor(pose)

ایجاد یک لنگر ثابت در جهان

برای ایجاد لنگری که در جهان ثابت باشد، آن را به Anchorable پیوست نکنید. فقط برای نقطه‌هایی که در فضا شناور هستند از این نوع نقطه اتکا استفاده کنید زیرا تخمین جلسه از مکان اشیای غیرقابل‌حرکت با گذشت زمان تغییر می‌کند:

val anchor = Anchor.create(session, pose)

پیوست کردن نهاد به لنگر

برای پرداز کردن مدل در این مکان، GltfModel ایجاد کنید و والد آن را روی AnchorSpace تنظیم کنید.

AnchorSpace.create(session, anchor).apply {
    parent = session.scene.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() تماس بگیرید. این کار لنگر را از فضای ذخیره‌سازی برنامه‌تان برمی‌دارد و باعث می‌شود شناسه جهانی یکتای داده‌شده برای فراخوانی‌های Anchor.load() قابل‌بازیابی نباشد.

Anchor.unpersist(session, uuid)

برنامه شما همچنین می‌تواند فهرست همه لنگرهایی را که ماندگار شده‌اند و هنوز در فضای ذخیره‌سازی برنامه‌تان وجود دارند درخواست کند:

val uuids = Anchor.getPersistedAnchorUuids(session)