Physics.Raycast
Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 33 di 63.
Un raycast proietta una linea invisibile da un punto in una direzione e segnala se ha colpito un collider. Physics.Raycast(origin, direction, maxDistance) restituisce true quando un collider si trova sulla linea entro maxDistance unità, e false altrimenti. Questa auto frena quando qualcosa si trova a meno di 2 unità davanti al muso:
public float brakeDistance = 2f;
void Update()
{
if (Physics.Raycast(transform.position, transform.forward, brakeDistance))
{
Debug.Log("Brake!");
}
}transform.forward ruota insieme all'auto, quindi il raggio guarda sempre fuori dal muso; Vector3.forward punterebbe sempre lungo l'asse z del mondo. Il raggio parte dal centro dell'auto, dentro il suo stesso collider, e un raggio non segnala mai un collider al cui interno ha origine, quindi l'auto non vede se stessa. Ometti maxDistance e il raggio proseguirà all'infinito: l'auto frenerebbe per una parete dall'altra parte della mappa.
I raggi rilevano i collider, non ciò che viene disegnato: un oggetto con un Renderer e senza collider è invisibile ai raggi, mentre un collider trigger conta come un colpo. Durante i test, Debug.DrawRay(transform.position, transform.forward * brakeDistance, Color.red) disegna il raggio nella vista Scene di Unity.
Sfida
MedioRendi automatica la porta del negozio. Lo script DoorSensor si trova sul Sensor sopra l'ingresso, a 3.5 unità da terra. Nell'Inspector gli vengono assegnati door e un reach pari a 3.
- A ogni frame, lancia un raggio dal Sensor dritto verso il basso, lungo
reachunità. - Finché il raggio colpisce qualcosa, la porta è aperta: nascondila con
SetActive(false). Quando non colpisce nulla, mostra di nuovo la porta.
Il terreno è fuori dalla portata del raggio, quindi la porta resta chiusa finché qualcuno non si mette sotto il Sensor. Premi Play e fai camminare il Visitor sotto di esso con le frecce, poi premi Check.
Provalo tu
using UnityEngine;
public class DoorSensor : MonoBehaviour
{
public GameObject door;
public float reach = 3f;
void Update()
{
// Apri la porta finché il raggio diretto verso il basso dal Sensor colpisce qualcosa.
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fisica e gameplay
1Corpo rigido
Gravità e massaSpingi con AddForceSalta con un impulsoFixedUpdate per la fisicaVelocitàCorpi cinematiciRiepilogo: piattaforma di lancio4Coroutine
InvokeInvokeRepeating, CancelInvokeLa tua prima coroutineCicli nelle coroutineInterrompere le coroutineRiepilogo: conto alla rovescia2Collisioni
OnCollisionEnterCosa ho colpito?Rompersi all'impattoRestare a terraRimbalzo e attritoForme dei ColliderRiepilogo: muro distruttibile5Progetto: Corsa alle monete
La palla rotolanteMonete da raccogliere