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

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

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

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

از طریق یک Session ARCore برای Jetpack XR، لنگرها را ایجاد کنید. اگر در حال بهبود رابط کاربری مکانی با استفاده از Jetpack Compose برای XR هستید، از Jetpack Compose برای XR به یک جلسه دسترسی پیدا کنید . اگر با موجودیت‌های مکانی از کتابخانه Jetpack SceneCore کار می‌کنید، از Jetpack XR Runtime به یک جلسه دسترسی پیدا کنید .

پیکربندی جلسه

ایجاد و بارگذاری anchorها نیازی به پیکربندی session ندارد. با این حال، ماندگاری anchor به طور پیش‌فرض در sessionهای XR فعال نیست. برای ماندگاری و بارگذاری anchorها از حافظه محلی، session را پیکربندی کرده و حالت AnchorPersistenceMode.LOCAL را تنظیم کنید:

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

محتوا را به یک مکان ثابت در فضا متصل کنید

یک لنگر با استفاده از یک Pose ایجاد می‌شود که می‌تواند نسبت به یک Trackable موجود یا غیر آن تفسیر شود.

ایجاد یک لنگر (anchor) نسبت به یک Trackable

وقتی یک لنگر نسبت به یک Trackable ، مانند یک Plane ، ایجاد می‌شود که باعث می‌شود لنگر هنگام حرکت در فضا، Trackable متصل را دنبال کند.

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

یک لنگر بدون Trackable ایجاد کنید

برای ایجاد یک anchor که به 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 دارد که باید قبل از استفاده بررسی شود. Trackable ای که TrackableState آن Tracking باشد، Pose آن به طور فعال توسط سیستم به‌روزرسانی می‌شود. Trackable ای که Paused باشد، ممکن است در آینده Tracking تبدیل شود، در حالی که Trackableای که Stopped باشد، هرگز Tracking تبدیل نخواهد شد.

در طول جلسات، یک لنگر را حفظ کنید

یک anchor که ذخیره نشده باشد، پس از نابودی session ناپدید می‌شود. با ذخیره یک anchor، برنامه شما موقعیت آن anchor را در داده‌های خصوصی برنامه خود به خاطر می‌سپارد. این anchor می‌تواند در session بعدی بازیابی شود و در همان مکان در جهان ذخیره می‌شود.

برای پایدار کردن یک لنگر، 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
    }
}

وقتی دیگر به یک anchor نیاز ندارید، unpersist() را فراخوانی کنید. این کار anchor را از حافظه برنامه شما حذف می‌کند و UUID داده شده را برای فراخوانی‌های Anchor.load() غیرقابل بازیابی می‌کند.

Anchor.unpersist(session, uuid)

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

val uuids = Anchor.getPersistedAnchorUuids(session)