3D bir nesnenin sahnenizdeki konumunu belirlemek için raycast veya isabet testi gerçekleştirin. Doğru yerleşim, AR içeriğinin uygun (görünen) 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 alınan derinlik bilgilerini kullanır | 3D yüzeye dik | Sanal nesneyi rastgele bir yüzeye yerleştirin (yalnızca zeminlere ve duvarlara değil) |
Bunun ç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 çarpar | 3D yüzeye dik | Bir nesneyi, uçağın tam geometrisini kullanarak düzleme (zemin veya duvar) yerleştirin. Hemen doğru ölçek gerekiyor. Derinlik isabet testinin yedeği |
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 etrafındaki görsel özelliklerden yararlanır | 3D yüzeye dik | Bir nesneyi sadece zemin ve duvarlara değil, rastgele bir yüzeye yerleştirin |
ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
|
Kalıcı Raycast (Anında Yerleşim) | İçerik yerleştirmek için ekran alanını kullanır. Başlangıçta 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, yer çekiminin karşısında yukarıyı gösteriyor | Hızlı yerleştirmenin kritik önemde olduğu ve deneyimin bilinmeyen başlangıç derinliği ve ölçeğin tolere edilebileceği uçağın tam geometrisini kullanarak bir nesneyi düzleme (zemin veya duvar) yerleştirin |
ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)
|
Standart raycast gerçekleştirin
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 yapma
Işın görüntüleri genellikle cihazın veya cihazın kamerasından gelen ışınlar olarak ele alınır. Ancak Raycast(Ray, List<ARRaycastHit>, TrackableType)
'i kullanarak ekran-uzay noktası yerine dünya uzayı koordinatlarında rastgele bir ışın kullanarak ışın yayını yapabilirsiniz.
ARRaycastHit
kullanarak sabit oluşturun
Bir raycast isabeti aldıktan sonra GameObject.AddComponent<ARAnchor>
kullanarak bir Sabitleme oluşturun ve raycast isabetini giriş olarak kullanıp GameObject
cihazınıza 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ı raycast'ler (Anında Yerleşim)
Kalıcı ışın yayınları, sahnenize AR içeriği yerleştirmek için yeni bir ARRaycast
oluşturmak üzere bir ekran konumunu ve giriş olarak yüzeye olan tahmini mesafeyi kullanır. ARCore'da bu, Anında Yerleşim olarak bilinir.
ARRaycastManager.RemoveRaycast()
numaralı telefonu arayıncaya veya ARRaycastManager
devre dışı bırakılıncaya kadar otomatik olarak güncellenmeye devam eden bir ARRaycast
oluşturmak için ARRaycastManager.AddRaycast()
numaralı telefonu arayın.
Başlangıçta ARRaycast
ile mesafe, AddRaycast()
çağrısında belirtilen mesafe olur. ARCore, yerel geometrinin haritasını çıkardıktan ve kesişen bir düzlem bulduktan sonra, uzaklık gerçek uzaklığa göre güncellenir. Uzaklık değişikliği, nesnenin görünen "boyutunu" veya algılanan ölçeğini etkileyebilir.