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)