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ı
Belirli kavram ve yöntemlerin adları, AR Foundation ile Unity için ARCore SDK'sı arasında farklılık gösterebilir. Bunlar, kolay referans için aşağıdaki tabloda listelenmiştir.
AR Foundation | Unity için ARCore SDK'sı |
Kalıcı ışın ışınları | Anında Yerleşim |
ARRaycastManager.AddRaycast(Vector2, float)
|
Frame.RaycastInstantPlacement(float, float, float, out TrackableHit)
|
ARRaycast
|
TrackableHit
|
(Eşdeğerlik yok) | InstantPlacementPoint
|
ARRaycast.trackingState
|
InstantPlacementPointTrackingMethod
|
Ön koşullar
Bu kılavuzda, Unity'yi zaten yükleyip yapılandırdığınız varsayılmaktadır. Yüklü değilse yükleme ve kurulum adımları için AR Foundation için ARCore uzantılarını kullanmaya başlama başlıklı makaleyi inceleyin.
ARRaycastManager
ile yeni oturum yapılandırın
Anında Yerleşim (kalıcı raycast'ler), AR Foundation paketiyle kullanıma hazır olarak sunulur. Sahnenizi ayarlamak için aşağıdaki adımları uygulayın.
AR Foundation 4.x
Önceden tanımlanmış oyun nesnelerini AR Session Origin ve AR Session ekleyin.
AR Raycast Manager bileşenini AR Session Origin oyun nesnesine ekleyin.
Raycast Prefab null olmadığı zaman ARRaycastManager
, prefabosu örneklendirir ve pozunu ARRaycast
pozuyla otomatik olarak senkronize eder.
AR Foundation 5.x
Önceden tanımlanmış oyun nesnelerini XR Origin ve AR Session ekleyin.
AR Raycast Manager bileşenini XR Origin oyun nesnesine ekleyin.
Raycast Prefab null olmadığında ARRaycastManager
, prefab'ı örneklendirir ve pozunu ARRaycast
'in pozuyla otomatik olarak senkronize eder.
Nesne yerleştirme
Yeni bir ARCore oturumunda, ARRaycastManager.AddRaycast(Vector2, float)
kullanarak bir isabet testi gerçekleştirin.
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 doğru bir 3D duruşu varsa ARRaycast.trackingState
Tracking
olur.
Aksi takdirde, Limited
ile başlar ve ARCore doğru 3D poz verdiğinde Tracking
'e geçer. İzleme durumu Tracking
olduğunda Limited
durumuna geri dönmez.