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.