Menu
CoddyTech

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.

challenge icon

Sfida

Medio

Rendi 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 reach unità.
  • 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.
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fisica e gameplay