برای تعیین محل صحیح یک شی 3 بعدی در صحنه خود، یک raycast یا تست ضربه انجام دهید. قرارگیری صحیح تضمین می کند که محتوای AR در اندازه مناسب (ظاهری) ارائه می شود.
انواع نتیجه را بزنید
همانطور که در جدول زیر نشان داده شده است، یک تست ضربه می تواند چهار نوع مختلف از نتایج ضربه را به دست دهد.
نوع نتیجه را بزنید | توضیحات | جهت گیری | مورد استفاده | فراخوانی روش |
---|---|---|---|---|
عمق | از اطلاعات عمق کل صحنه برای تعیین عمق و جهت صحیح یک نقطه استفاده می کند | عمود بر سطح سه بعدی | یک شی مجازی را روی یک سطح دلخواه (نه فقط روی زمین و دیوار) قرار دهید. | برای این کار باید Depth فعال کرد.ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth) |
هواپیما | برای تعیین عمق و جهت صحیح نقطه، به سطوح افقی و/یا عمودی برخورد می کند | عمود بر سطح سه بعدی | یک شی را با استفاده از هندسه کامل هواپیما روی یک صفحه (کف یا دیوار) قرار دهید. فوراً به مقیاس صحیح نیاز دارید. جایگزینی برای آزمون ضربه عمق | ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon) |
نقطه ویژگی | برای تعیین موقعیت و جهت گیری صحیح یک نقطه، به ویژگی های بصری در اطراف نقطه ضربه کاربر متکی است | عمود بر سطح سه بعدی | یک شی را روی یک سطح دلخواه (نه فقط روی زمین و دیوار) قرار دهید. | ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint) |
Persistent Raycast (قرار دادن فوری) | از فضای صفحه برای قرار دادن محتوا استفاده می کند. در ابتدا از عمق تخمینی ارائه شده توسط برنامه استفاده می کند. فورا کار می کند، اما زمانی که ARCore بتواند هندسه صحنه واقعی را تعیین کند ژست و عمق واقعی تغییر می کند. | +Y به سمت بالا، مخالف گرانش | یک شی را بر روی یک صفحه (کف یا دیوار) با استفاده از هندسه کامل هواپیما قرار دهید، جایی که قرارگیری سریع بسیار مهم است، و تجربه می تواند عمق و مقیاس اولیه ناشناخته را تحمل کند. | ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance) |
یک raycast استاندارد انجام دهید
با ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType)
تماس بگیرید تا یک raycast (هیت تست) انجام دهید. ARRaycastManager
از همه TrackableType
پشتیبانی می کند.
var touch = Input.GetTouch(0);
if (touch.phase != TouchPhase.Began)
return;
// Raycast against planes and feature points.
const TrackableType trackableTypes =
TrackableType.FeaturePoint |
TrackableType.PlaneWithinPolygon;
List<ARRaycastHit> hits = new List<ARRaycastHit>();
// Perform the raycast.
if (raycastManager.Raycast(touch.position, hits, trackableTypes))
{
// Raycast hits are sorted by distance, so the first one will be the closest hit.
var hit = hits[0];
// Do something with hit.
}
با استفاده از یک پرتو و جهت دلخواه یک پرتو پرتوی را انجام دهید
Raycast ها معمولاً به عنوان پرتوهای دستگاه یا دوربین دستگاه در نظر گرفته می شوند، اما می توانید از Raycast(Ray, List<ARRaycastHit>, TrackableType)
برای هدایت پرتو با استفاده از یک پرتو دلخواه در مختصات فضای جهان به جای نقطه فضای صفحه استفاده کنید.
با استفاده از ARRaycastHit
یک Anchor ایجاد کنید
هنگامی که یک ضربه raycast دریافت کردید، از GameObject.AddComponent<ARAnchor>
برای ایجاد Anchor استفاده کنید و آن را به عنوان یک جزء به GameObject
خود اضافه کنید، با استفاده از ضربه raycast به عنوان ورودی. جزء ARAnchor
به طور مداوم Transform
شی بازی را به روز می کند، به طوری که شی بازی برای نتیجه ضربه به Trackable
زیرین متصل می شود.
پرتوهای دائمی (قرار دادن فوری)
پرتوهای دائمی از یک مکان صفحه و فاصله تخمینی از یک سطح به عنوان ورودی برای ایجاد یک ARRaycast
جدید برای قرار دادن محتوای AR در صحنه شما استفاده می کنند. در ARCore، این به عنوان Instant Placement شناخته می شود.
برای ایجاد یک ARRaycast
که تا زمانی که ARRaycastManager.RemoveRaycast()
فراخوانی نکنید یا ARRaycastManager
غیرفعال کنید، به طور خودکار به روز رسانی می شود، ARRaycastManager.AddRaycast()
را فراخوانی کنید.
در ابتدا، فاصله ARRaycast
مسافتی است که در فراخوانی AddRaycast()
ارائه شده است. هنگامی که ARCore هندسه محلی را ترسیم کرد و صفحه متقاطع را پیدا کرد، فاصله به یک فاصله واقعی به روز می شود. تغییر در فاصله می تواند بر "اندازه" ظاهری یا مقیاس درک شده شی تأثیر بگذارد.