Menjalankan raycast di aplikasi Unity (AR Foundation)

Lakukan raycast, atau hit-test, untuk menentukan penempatan objek 3D yang benar dalam scene. Penempatan yang benar memastikan konten AR dirender dengan ukuran yang sesuai (terlihat).

Jenis hasil hit

Hit-test dapat menghasilkan empat jenis hasil hit yang berbeda, seperti yang ditunjukkan pada tabel berikut.

Jenis hasil hit Deskripsi Orientasi Kasus penggunaan Panggilan metode
Berkesan dalam Menggunakan informasi kedalaman dari seluruh adegan untuk menentukan kedalaman dan orientasi titik yang benar Tegak lurus dengan permukaan 3D Menempatkan objek virtual di permukaan arbitrer (bukan hanya di lantai dan dinding) Depth harus diaktifkan agar dapat berfungsi.

ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
Pesawat Menekan permukaan horizontal dan/atau vertikal untuk menentukan kedalaman dan orientasi titik yang benar Tegak lurus dengan permukaan 3D Tempatkan objek pada bidang (lantai atau dinding) menggunakan geometri penuh bidang. Perlu timbangan yang benar segera. Pengganti untuk hit-test Depth ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
Poin fitur Mengandalkan fitur visual di sekitar titik ketukan pengguna untuk menentukan posisi dan orientasi titik yang benar Tegak lurus dengan permukaan 3D Meletakkan objek di permukaan arbitrer (bukan hanya di lantai dan dinding) ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
Persistent Raycast (Penempatan Instan) Menggunakan ruang layar untuk menempatkan konten. Awalnya menggunakan perkiraan kedalaman yang disediakan oleh aplikasi. Berfungsi secara instan, tetapi pose dan kedalaman sebenarnya akan berubah setelah ARCore dapat menentukan geometri adegan yang sebenarnya +Y mengarah ke atas, berlawanan dengan gravitasi Letakkan objek di bidang (lantai atau dinding) menggunakan geometri penuh pesawat di mana penempatan yang cepat sangatlah penting, dan pengalaman ini dapat menoleransi kedalaman dan skala awal yang tidak diketahui ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)

Melakukan {i>raycast<i} standar

Panggil ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType) untuk melakukan raycast (hit-test). ARRaycastManager mendukung semua TrackableType.

var touch = Input.GetTouch(0);
if (touch.phase != TouchPhase.Began)
    return;

// Raycast against planes and feature points.
const TrackableType trackableTypes =
    TrackableType.FeaturePoint |
    TrackableType.PlaneWithinPolygon;
List<ARRaycastHit> hits = new List<ARRaycastHit>();
// Perform the raycast.
if (raycastManager.Raycast(touch.position, hits, trackableTypes))
{
    // Raycast hits are sorted by distance, so the first one will be the closest hit.
    var hit = hits[0];
    // Do something with hit.
}

Melakukan raycast menggunakan sinar dan arah arbitrer

Sinar sinar biasanya diperlakukan sebagai sinar dari perangkat atau kamera perangkat, tetapi Anda dapat menggunakan Raycast(Ray, List<ARRaycastHit>, TrackableType) untuk melakukan siaran sinar menggunakan sinar arbitrer dalam koordinat ruang dunia, bukan titik ruang layar.

Membuat Anchor menggunakan ARRaycastHit

Setelah mendapatkan hit raycast, gunakan GameObject.AddComponent<ARAnchor> untuk membuat Anchor dan menambahkannya sebagai komponen ke GameObject, menggunakan hit raycast sebagai input. Komponen ARAnchor akan terus memperbarui Transform objek game, sehingga objek game tetap terpasang ke Trackable yang mendasarinya untuk hasil hit.

Sinar sinar persisten (Penempatan Instan)

Siaran sinar persisten menggunakan lokasi layar, dan perkiraan jarak ke permukaan sebagai input untuk membuat ARRaycast baru guna menempatkan konten AR di scene Anda. Di ARCore, ini dikenal sebagai Penempatan Instan.

Panggil ARRaycastManager.AddRaycast() untuk membuat ARRaycast yang terus diperbarui secara otomatis hingga Anda memanggil ARRaycastManager.RemoveRaycast() atau menonaktifkan ARRaycastManager.

Awalnya, jarak ARRaycast akan menjadi jarak yang diberikan dalam panggilan AddRaycast(). Setelah ARCore memetakan geometri lokal dan menemukan bidang yang berpotongan, jarak akan diperbarui ke jarak sebenarnya. Perubahan jarak dapat memengaruhi "ukuran" atau skala objek yang jelas.

Langkah selanjutnya