Panduan developer Penempatan Instan untuk AR Foundation

Pelajari cara menggunakan Instant Placement API, atau raycast persisten, di aplikasi Anda sendiri.

Prasyarat

Pastikan Anda memahami konsep AR dasar dan cara mengonfigurasi sesi ARCore sebelum melanjutkan.

Nama konsep

Nama konsep dan metode tertentu dapat berbeda antara AR Foundation dan ARCore SDK untuk Unity. Hal ini tercantum dalam tabel di bawah sebagai referensi yang mudah.

Dasar-Dasar AR ARCore SDK untuk Unity
Sinar sinar persisten Penempatan Instan
ARRaycastManager.AddRaycast(Vector2, float) Frame.RaycastInstantPlacement(float, float, float, out TrackableHit)
ARRaycast TrackableHit
(Tidak ada padanan) InstantPlacementPoint
ARRaycast.trackingState InstantPlacementPointTrackingMethod

Prasyarat

Panduan ini mengasumsikan bahwa Anda telah menginstal dan mengonfigurasi Unity. Jika belum, lihat Memulai Ekstensi ARCore untuk AR Foundation untuk mengetahui langkah-langkah penginstalan dan penyiapan.

Konfigurasi sesi baru dengan ARRaycastManager

Penempatan Instan (raycast persisten) tersedia dan siap pakai dengan paket AR Foundation. Ikuti langkah-langkah berikut untuk menyiapkan suasana.

AR Foundation 4.x

  1. Tambahkan objek game yang telah ditentukan AR Session Origin dan AR Session.

  2. Tambahkan komponen AR Raycast Manager ke dalam objek game AR Session Origin.

Jika Raycast Prefab tidak null, ARRaycastManager akan membuat instance prefab dan otomatis menyinkronkan posenya dengan pose ARRaycast.

AR Foundation 5.x

  1. Tambahkan objek game yang telah ditentukan XR Origin dan AR Session.

  2. Tambahkan komponen AR Raycast Manager ke dalam objek game XR Origin.

Jika Raycast Prefab tidak null, ARRaycastManager akan membuat instance prefab dan otomatis menyinkronkan posenya dengan pose ARRaycast.

Menempatkan objek

Dalam sesi ARCore baru, lakukan hit test menggunakan ARRaycastManager.AddRaycast(Vector2, float).

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.
        …
    }
}

Memantau status pelacakan ARRaycast

Jika ARCore memiliki pose 3D yang akurat, ARRaycast.trackingState akan menjadi Tracking. Jika tidak, ARCore akan dimulai dengan Limited dan bertransisi ke Tracking setelah ARCore memiliki pose 3D yang akurat. Setelah status pelacakan menjadi Tracking, status tidak akan dikembalikan ke Limited.