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

Sahnenizdeki bir 3D nesnenin doğru yerleşimini belirlemek için 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ı isabet sonucu türü 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ındaki derinlik bilgilerini kullanır 3D yüzeye dik Sanal bir nesneyi herhangi bir yüzeye (yalnızca zemin ve duvarlara değil) yerleştirme Depth'nin etkinleştirilmesi gerekir.

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 düzlemin (zemin veya duvar) üzerine, uçağın tam geometrisini kullanarak yerleştirin. Hemen doğru ölçeğe ihtiyacımı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ının dokunduğu noktanın çevresindeki görsel özelliklere dayanır. 3D yüzeye dik Bir nesneyi rastgele bir yüzeye (yalnızca zemin ve duvarlara değil) yerleştirme 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. İlk olarak uygulama tarafından sağlanan tahmini derinliği kullanır. Anında çalışır ancak ARCore gerçek sahne geometrisini belirledikten sonra poz ve gerçek derinlik değişir. +Y yukarı, yer çekiminin tersi Hızlı yerleşimin kritik olduğu ve deneyimin bilinmeyen ilk derinlik ve ölçeği tolere edebileceği durumlarda, düzlem geometrisinin tamamını kullanarak bir nesneyi düzleme (zemin veya duvar) yerleştirme ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)

Standart bir ışın izleme 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 dosyalarını 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.
}

İsteğe bağlı bir ışın ve yön kullanarak ışın izleme gerçekleştirme

Işın izlemeler genellikle cihazdan veya cihaz kamerasından gelen ışınlar olarak değerlendirilir ancak ekran alanı noktası yerine dünya alanı koordinatlarında rastgele bir ışın kullanarak Raycast(Ray, List<ARRaycastHit>, TrackableType) kullanarak ışın izleme yapabilirsiniz.

ARRaycastHit kullanarak bir Bağlayıcı 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üncelleyerek oyun nesnesinin isabet sonucu için temel Trackable'ye bağlı kalmasını sağlar.

Kalıcı ışın izleme (Anında Yerleşim)

Kalıcı ışın izlemeler, sahnenize AR içeriği yerleştirmek için yeni bir ARRaycast oluşturmak üzere giriş olarak bir ekran konumu ve bir 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'nin mesafesi, AddRaycast() çağrısında sağlanan mesafedir. ARCore yerel geometriyi haritalandırdıktan ve kesişen bir düzlem bulduktan sonra mesafe gerçek mesafeye güncellenir. Mesafedeki değişiklik, nesnenin görünen "boyutunu" veya algılanan ölçeğini etkileyebilir.

Sırada ne var?