Menjalankan raycast di aplikasi Unity (AR Foundation)

Lakukan raycast, atau hit-test, untuk menentukan penempatan objek 3D yang benar di tampilan Anda. Penempatan yang benar memastikan konten AR dirender pada ukuran yang sesuai (jelas).

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 adegan untuk menentukan kedalaman dan orientasi titik yang benar Tegak lurus dengan permukaan 3D Meletakkan objek virtual di atas permukaan sembarang tempat (tidak hanya di lantai dan dinding) Depth harus diaktifkan agar fitur ini 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 dengan permukaan 3D Tempatkan objek di bidang (lantai atau dinding) menggunakan geometri penuh bidang. Perlu timbangan yang benar segera. Penggantian untuk hit-test Depth ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
Poin fitur Mengandalkan fitur visual di sekitar titik yang diketuk pengguna untuk menentukan posisi dan orientasi titik yang benar Tegak lurus dengan 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)
Persistent Raycast (Penempatan Instan) Menggunakan ruang layar untuk menempatkan konten. Awalnya menggunakan perkiraan kedalaman yang disediakan oleh aplikasi. Dapat langsung berfungsi, tetapi pose dan kedalaman sebenarnya akan berubah setelah ARCore dapat menentukan geometri adegan yang sebenarnya +Y menunjuk ke atas, berlawanan dengan gravitasi Letakkan objek di bidang (lantai atau dinding) menggunakan geometri penuh bidang yang memerlukan penempatan cepat, dan pengalamannya 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 transmisi sinar 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 tambahkan sebagai komponen ke GameObject, menggunakan hit raycast sebagai input. Komponen ARAnchor akan terus memperbarui Transform objek game, sehingga objek game tetap melekat pada Trackable dasar untuk hasil hit.

Radiasi persisten (Penempatan Instan)

Raycast persisten menggunakan lokasi layar, dan perkiraan jarak ke permukaan sebagai input untuk membuat ARRaycast baru guna menempatkan konten AR di adegan 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 adalah 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 terlihat atau skala obyek yang dirasakan.

Langkah selanjutnya