Anchor یک مکان ثابت و جهت گیری را در دنیای واقعی توصیف می کند. چسباندن یک شی به یک لنگر کمک می کند تا اشیا به صورت واقع بینانه در دنیای واقعی قرار گیرند.
یک ARCore برای جلسه Jetpack XR ایجاد کنید
لنگرها را از طریق یک جلسه ARCore برای Jetpack XR ایجاد کنید. برای به دست آوردن Session به درک چرخه زندگی یک Session مراجعه کنید.
Session را پیکربندی کنید
ایجاد و بارگذاری لنگرها نیازی به پیکربندی جلسه ندارد. با این حال، ماندگاری لنگر به طور پیشفرض در جلسات XR فعال نیست. برای تداوم و بارگیری لنگرها از حافظه محلی، جلسه را پیکربندی کنید و حالت 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 موجود تفسیر شود یا نه.
یک لنگر نسبت به 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 ایجاد کنید و والد آن را روی AnchorEntity تنظیم کنید.
AnchorEntity.create(session, anchor).apply { parent = session.scene.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)