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ı

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

  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ığı zaman ARRaycastManager, prefabosu örneklendirir ve pozunu ARRaycast 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 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.