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

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

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

  2. 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

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

  2. 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.