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?
- Unity'nin AR Foundation codelab'ini kullanarak AR oyunu oluşturma.