Unity (AR Foundation) uygulamanızda raycast'ler gerçekleştirme

3D bir nesnenin sahnenizdeki konumunu belirlemek için raycast veya isabet testi gerçekleştirin. Doğru yerleşim, AR içeriğinin uygun (görünen) boyutta oluşturulmasını sağlar.

İsabet sonucu türleri

İsabet testi, aşağıdaki tabloda gösterildiği gibi, dört farklı türde isabet sonucu verebilir.

İsabet sonucu türü Açıklama Yön Kullanım alanı Yöntem çağrıları
Derin Bir noktanın doğru derinliğini ve yönünü belirlemek için sahnenin tamamından alınan derinlik bilgilerini kullanır 3D yüzeye dik Sanal nesneyi rastgele bir yüzeye yerleştirin (yalnızca zeminlere ve duvarlara değil) Bunun çalışması için Depth etkinleştirilmelidir.

ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
Uçak Bir noktanın doğru derinliğini ve yönünü belirlemek için yatay ve/veya dikey yüzeylere çarpar 3D yüzeye dik Bir nesneyi, uçağın tam geometrisini kullanarak düzleme (zemin veya duvar) yerleştirin. Hemen doğru ölçek gerekiyor. Derinlik isabet testinin yedeği ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
Özellik noktası Bir noktanın doğru konumunu ve yönünü belirlemek için kullanıcının dokunduğu noktanın etrafındaki görsel özelliklerden yararlanır 3D yüzeye dik Bir nesneyi sadece zemin ve duvarlara değil, rastgele bir yüzeye yerleştirin ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
Kalıcı Raycast (Anında Yerleşim) İçerik yerleştirmek için ekran alanını kullanır. Başlangıçta uygulama tarafından sağlanan tahmini derinliği kullanır. Anında çalışır, ancak ARCore gerçek sahne geometrisini belirlediğinde poz ve gerçek derinlik değişir. +Y, yer çekiminin karşısında yukarıyı gösteriyor Hızlı yerleştirmenin kritik önemde olduğu ve deneyimin bilinmeyen başlangıç derinliği ve ölçeğin tolere edilebileceği uçağın tam geometrisini kullanarak bir nesneyi düzleme (zemin veya duvar) yerleştirin ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)

Standart raycast gerçekleştirin

Raycast (isabet testi) gerçekleştirmek için ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType) numaralı telefonu arayın. ARRaycastManager tüm TrackableType öğelerini destekler.

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.
}

Rastgele bir ışın ve yön kullanarak raycast yapma

Işın görüntüleri genellikle cihazın veya cihazın kamerasından gelen ışınlar olarak ele alınır. Ancak Raycast(Ray, List<ARRaycastHit>, TrackableType)'i kullanarak ekran-uzay noktası yerine dünya uzayı koordinatlarında rastgele bir ışın kullanarak ışın yayını yapabilirsiniz.

ARRaycastHit kullanarak sabit oluşturun

Bir raycast isabeti aldıktan sonra GameObject.AddComponent<ARAnchor> kullanarak bir Sabitleme oluşturun ve raycast isabetini giriş olarak kullanıp GameObject cihazınıza bileşen olarak ekleyin. ARAnchor bileşeni, oyun nesnesinin Transform değerini sürekli olarak günceller. Böylece, oyun nesnesi, isabet sonucu için temel Trackable öğesine bağlı kalır.

Kalıcı raycast'ler (Anında Yerleşim)

Kalıcı ışın yayınları, sahnenize AR içeriği yerleştirmek için yeni bir ARRaycast oluşturmak üzere bir ekran konumunu ve giriş olarak yüzeye olan tahmini mesafeyi kullanır. ARCore'da bu, Anında Yerleşim olarak bilinir.

ARRaycastManager.RemoveRaycast() numaralı telefonu arayıncaya veya ARRaycastManager devre dışı bırakılıncaya kadar otomatik olarak güncellenmeye devam eden bir ARRaycast oluşturmak için ARRaycastManager.AddRaycast() numaralı telefonu arayın.

Başlangıçta ARRaycast ile mesafe, AddRaycast() çağrısında belirtilen mesafe olur. ARCore, yerel geometrinin haritasını çıkardıktan ve kesişen bir düzlem bulduktan sonra, uzaklık gerçek uzaklığa göre güncellenir. Uzaklık değişikliği, nesnenin görünen "boyutunu" veya algılanan ölçeğini etkileyebilir.

Sonraki adımlar