AR Foundation için Anında Yerleşim geliştirici kılavuzu

Kendi uygulamalarınızda Anında Yerleşim API'sini veya kalıcı ışın izlemeyi 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 izleme 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ı ışın izleme), AR Foundation paketiyle birlikte kullanıma hazırdır. Sahnenizi ayarlamak için aşağıdaki adımları uygulayın.

AR Foundation 4.x

  1. Önceden tanımlanmış oyun nesnelerini AR Session Origin ve AR Session ekleyin.

  2. AR Raycast Manager bileşenini AR Session Origin oyun nesnesine ekleyin.

Raycast Prefab null olmadığında ARRaycastManager, prefab'ı örneklendirir ve pozunu ARRaycast'in pozuyla otomatik olarak senkronize eder.

AR Foundation 5.x

  1. Önceden tanımlanmış oyun nesnelerini XR Origin ve AR Session ekleyin.

  2. 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 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 doğru bir 3D duruşu varsa ARRaycast.trackingState Tracking olur. Aksi takdirde, Limited ile başlar ve ARCore doğru bir 3D duruş elde ettiğinde Tracking olarak değişir. İzleme durumu Tracking olduğunda Limited durumuna geri dönmez.