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

Sahnenizdeki 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üzlemdeki tüm geometriyi kullanarak bir düzleme (zemin veya duvar) 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)
Kalıcı Işın Çarpması (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 belirlediğinde 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

Işın izleme (çarpma testi) yapmak için ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType) işlevini çağırı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 ana sayfa bağlantısı oluşturma

Bir ışın izleme isabeti aldıktan sonra GameObject.AddComponent<ARAnchor> kullanarak bir sabitleme oluşturun ve ışın izleme isabetini giriş olarak kullanarak 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 buna Anında Yerleşim adı verilir.

ARRaycastManager.RemoveRaycast()'i çağırana veya ARRaycastManager'ı devre dışı bırakana kadar otomatik olarak güncellenmeye devam eden bir ARRaycast oluşturmak için ARRaycastManager.AddRaycast()'i 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?