Menu
CoddyTech

Physics.Raycast

Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 35 di 71.

Un raycast traccia una linea invisibile da un punto in una direzione e indica 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 c'è qualcosa 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 punta sempre in avanti dal muso; Vector3.forward punterebbe sempre lungo l'asse z del mondo. Il raggio parte dal centro dell'auto, all'interno del suo collider, e un raggio non segnala mai un collider al cui interno inizia, quindi l'auto non vede sé stessa. Se ometti maxDistance, il raggio continua all'infinito: l'auto frenerebbe davanti a un muro dall'altra parte della mappa.

I raggi rilevano i collider, non ciò che viene disegnato: un oggetto con un Renderer e senza collider è invisibile per loro, mentre un collider trigger conta come un impatto. Mentre esegui i test, Debug.DrawRay(transform.position, transform.forward * brakeDistance, Color.red) disegna il raggio nella vista Scene di Unity.

challenge icon

Sfida

Medio

Fai in modo che la porta del negozio si apra mentre qualcuno si trova sotto il sensore.

  1. In Update(), verifica Physics.Raycast(transform.position, Vector3.down, reach): un raggio diretto verso il basso, lungo reach unità, che si ferma sopra il terreno.
  2. Quando è vero, chiama door.SetActive(false); e, in else, door.SetActive(true);.

Premi «Gioca» e fai camminare il Visitatore sotto il sensore: la porta si apre e si chiude alle sue spalle. Poi premi «Verifica».

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.
    }
}

Tutte le lezioni di Fisica e gameplay

Esercitati da solo: Playground Unity