Menjalankan raycast di aplikasi Unity (AR Foundation)

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

Jenis hasil hit

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

Jenis hasil hit Deskripsi Orientasi Kasus penggunaan Panggilan metode
Berkesan dalam Menggunakan informasi kedalaman dari seluruh tampilan untuk menentukan kedalaman dan orientasi titik yang benar Tegak lurus terhadap permukaan 3D Meletakkan objek virtual di atas permukaan sembarang tempat (tidak hanya di lantai dan dinding) Depth harus diaktifkan agar dapat berfungsi.

ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
Pesawat Menabrak permukaan horizontal dan/atau vertikal untuk menentukan kedalaman dan orientasi titik yang benar Tegak lurus terhadap permukaan 3D Tempatkan objek di bidang (lantai atau dinding) menggunakan geometri penuh bidang. Perlu segera memperbaiki skala. Penggantian untuk hit-test Kedalaman ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
Titik fitur Bergantung pada fitur visual di sekitar titik ketukan pengguna untuk menentukan posisi dan orientasi titik yang benar Tegak lurus terhadap permukaan 3D Meletakkan objek di permukaan sembarang tempat (tidak hanya di lantai dan dinding) ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
Raycast Persisten (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 Menempatkan objek di bidang (lantai atau dinding) menggunakan geometri penuh bidang tempat penempatan cepat sangat penting, dan pengalaman dapat mentoleransi kedalaman dan skala awal yang tidak diketahui ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)

Melakukan raycast 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

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

Membuat Anchor menggunakan ARRaycastHit

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

Raycast persisten (Penempatan Instan)

Raycast persisten menggunakan lokasi layar, dan perkiraan jarak ke permukaan sebagai input untuk membuat ARRaycast baru guna meletakkan konten AR di tampilan Anda. Di ARCore, hal ini dikenal sebagai Instant Placement.

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 yang sebenarnya. Perubahan jarak dapat memengaruhi "ukuran" yang tampak atau skala yang dirasakan objek.

Langkah selanjutnya