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

Sahnenizdeki 3D nesnenin doğru yerleşimini belirlemek için bir raycast veya isabet testi yapın. Doğru yerleşim, AR içeriğinin uygun (görünür) 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 derinlik bilgisini kullanır 3D yüzeye dik Sanal nesneyi rastgele bir yüzeye (yalnızca zeminlere ve duvarlara değil) yerleştirin Bu özelliğin ç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 vurur 3D yüzeye dik Bir nesneyi düzlemin (zemin veya duvar) üzerine, uçağın tam geometrisini kullanarak yerleştirin. Hemen doğru ölçeğe ihtiyacınız var. Derinlik isabet testi için yedek 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ı dokunduğu nokta etrafındaki görsel özelliklerden yararlanır 3D yüzeye dik Bir nesneyi rastgele bir yüzeye yerleştirin (yalnızca zeminlere ve duvarlara değil) ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
Persistent Raycast (Anında Yerleşim) İçerik yerleştirmek için ekran alanını kullanır. Başlangıçta, uygulamanın sağladığı 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 çekimine karşı yukarıyı gösteriyor Hızlı yerleştirmenin kritik öneme sahip olduğu ve uçağın tam geometrisini kullanarak bir nesneyi düzleme (zemin veya duvar) üzerine yerleştirin. Deneyim, bilinmeyen başlangıç derinliğini ve ölçeğine tolere edilebilir. ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)

Standart raycast gerçekleştirme

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 yayınlama

Işın cast'leri genellikle cihazdan veya cihaz kamerasından gelen ışınlar olarak kabul edilir. Ancak Raycast(Ray, List<ARRaycastHit>, TrackableType) ile ekran-uzayı noktası yerine dünya uzay koordinatlarında rastgele bir ışın kullanarak ışın yayını yapabilirsiniz.

ARRaycastHit kullanarak bir Sabit oluşturun

Raycast isabeti aldıktan sonra GameObject.AddComponent<ARAnchor> kullanarak bir Anchor'ı oluşturun ve raycast isabetini giriş olarak kullanarak onu GameObject öğenize 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ı ışın yayınları (Anında Yerleşim)

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

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

Başlangıçta ARRaycast ile olan mesafe, AddRaycast() görüşmesinde belirtilen mesafe olur. ARCore, yerel geometrinin haritasını çıkarıp kesişen bir düzlem bulduğunda, mesafe gerçek mesafeyle güncellenir. Mesafedeki değişiklik, görünen "boyutu" etkileyebilir veya algılanan ölçeğiyle ilişkilidir.

Sırada ne var?