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

Anchor یک مکان ثابت و جهت گیری را در دنیای واقعی توصیف می کند. چسباندن یک شی به یک لنگر کمک می کند تا اشیا به صورت واقع بینانه در دنیای واقعی قرار گیرند.

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

لنگرها را از طریق یک جلسه ARCore برای Jetpack XR ایجاد کنید. برای به دست آوردن Session به درک چرخه زندگی یک Session مراجعه کنید.

Session را پیکربندی کنید

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

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 ایجاد کنید

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

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

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

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