Physics.Raycast
Termasuk bagian Fisika dan Gameplay dalam perjalanan Unity di Coddy. Pelajaran 33 dari 63.
Raycast menembakkan garis tak kasatmata dari suatu titik ke arah tertentu dan melaporkan apakah garis itu mengenai collider. Physics.Raycast(origin, direction, maxDistance) mengembalikan true saat ada collider pada garis tersebut dalam jarak maxDistance unit, dan mengembalikan false jika tidak. Mobil ini mengerem saat ada apa pun yang jaraknya kurang dari 2 unit di depan moncongnya:
public float brakeDistance = 2f;
void Update()
{
if (Physics.Raycast(transform.position, transform.forward, brakeDistance))
{
Debug.Log("Brake!");
}
}transform.forward berputar mengikuti mobil, sehingga ray selalu mengarah keluar dari moncongnya. Vector3.forward akan selalu mengarah sepanjang sumbu z dunia. Ray dimulai dari pusat mobil, di dalam collider-nya sendiri, dan ray tidak pernah melaporkan collider yang menjadi tempat awalnya, jadi mobil tidak melihat dirinya sendiri. Jika maxDistance tidak dicantumkan, ray akan terus berjalan tanpa batas. Mobil akan mengerem karena dinding di seberang peta.
Ray mendeteksi collider, bukan objek yang digambar. Objek dengan Renderer tanpa collider tidak terlihat oleh ray, dan collider pemicu tetap dihitung sebagai sasaran. Saat kamu menguji, Debug.DrawRay(transform.position, transform.forward * brakeDistance, Color.red) menggambar ray di tampilan Scene Unity.
Tantangan
SedangBuat pintu toko otomatis. Skrip DoorSensor berada pada Sensor di atas pintu, 3.5 unit di atas tanah. Inspector memberinya door dan reach sebesar 3.
- Setiap frame, tembakkan ray dari Sensor lurus ke bawah, sepanjang
reachunit. - Selama ray mengenai sesuatu, pintu terbuka: sembunyikan dengan
SetActive(false). Jika ray tidak mengenai apa pun, tampilkan pintu lagi.
Tanah berada di luar jangkauan ray, jadi pintu tetap tertutup sampai seseorang berdiri di bawah Sensor. Tekan Play dan gerakkan Visitor ke bawahnya dengan tombol panah, lalu Periksa.
Coba sendiri
using UnityEngine;
public class DoorSensor : MonoBehaviour
{
public GameObject door;
public float reach = 3f;
void Update()
{
// Buka pintu selama sinar yang mengarah ke bawah dari Sensor mengenai sesuatu.
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Fisika dan Gameplay
1Rigidbody
Gravitasi dan MassaDorong dengan AddForceMelompat dengan ImpulsFixedUpdate untuk FisikaKecepatanBenda KinematikRingkasan: Landasan Peluncur2Tabrakan
OnCollisionEnterApa yang Kutabrak?Pecah Saat BenturanBerdiri di Atas TanahPantulan dan GesekanBentuk ColliderRangkuman: Dinding yang Bisa Hancur