Anında Yerleşim API'sini veya kalıcı raycast'leri kendi uygulamalarınızda nasıl kullanacağınızı öğrenin.
Ön koşullar
Devam etmeden önce temel AR kavramlarını ve ARCore oturumunu nasıl yapılandıracağınızı anladığınızdan emin olun.
Kavram adları
Bazı kavramların ve yöntemlerin adları, AR Vakfı ve Unity için ARCore SDK'sı arasında farklılık gösterebilir. Bunlar, kolayca ulaşabilmeniz için aşağıdaki tabloda listelenmiştir.
AR Vakfı | Unity için ARCore SDK'sı |
Kalıcı raycast'ler | Anında Yerleşim |
ARRaycastManager.AddRaycast(Vector2, float)
|
Frame.RaycastInstantPlacement(float, float, float, out TrackableHit)
|
ARRaycast
|
TrackableHit
|
(Denklik yok) | InstantPlacementPoint
|
ARRaycast.trackingState
|
InstantPlacementPointTrackingMethod
|
Ön koşullar
Bu kılavuzda, Unity'yi yüklediğiniz ve yapılandırdığınız varsayılmaktadır. Aksi takdirde, kurulum ve kurulum adımları için ARCore Extensions for AR Foundation'a bakın.
ARRaycastManager
ile yeni bir oturum yapılandır
Anında Yerleşim (kalıcı raycast'ler), AR Temel paketiyle birlikte sunulur. Sahnenizi oluşturmak için aşağıdaki adımları uygulayın.
AR Foundation 4.x
Önceden tanımlanmış AR Session Origin ve AR Session oyun nesnelerini ekleyin.
AR Raycast Manager bileşenini AR Session Origin oyun nesnesine ekleyin.
Raycast Prefab null olmadığında ARRaycastManager
, prefab'i somutlaştırır ve pozunu ARRaycast
pozuyla otomatik olarak senkronize eder.
AR Foundation 5.x
Önceden tanımlanmış XR Origin ve AR Session oyun nesnelerini ekleyin.
AR Raycast Manager bileşenini XR Origin oyun nesnesine ekleyin.
Raycast Prefab null olmadığında ARRaycastManager
, prefab'i somutlaştırır ve pozunu ARRaycast
pozuyla otomatik olarak senkronize eder.
Nesne yerleştirme
Yeni bir ARCore oturumunda ARRaycastManager.AddRaycast(Vector2, float)
kullanarak isabet testi yapın.
public ARRaycastManager RaycastManager; // set from the Editor Inspector.
void Update()
{
Touch touch;
if (Input.touchCount < 1 || (touch = Input.GetTouch(0)).phase != TouchPhase.Began)
{
return;
}
if (EventSystem.current.IsPointerOverGameObject(touch.fingerId))
{
return;
}
ARRaycast raycast = RaycastManager.AddRaycast(touch.position, _estimateDistance);
if (raycast != null)
{
// You can instantiate a 3D object here if you haven’t set Raycast Prefab in the scene.
…
}
}
ARRaycast izleme durumunu izleme
ARCore'un 3D pozisyonu doğruysa ARRaycast.trackingState
Tracking
olur.
Aksi takdirde, Limited
ile başlar ve ARCore doğru bir 3D pozuna sahip olduğunda Tracking
'e geçer. İzleme durumu Tracking
olduğunda Limited
'e geri döndürülmez.