Menu
CoddyTech

RaycastHit

Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 34 di 63.

Physics.Raycast può anche dirti cosa ha colpito. Aggiungi out RaycastHit hit dopo la direzione: quando il metodo restituisce true, riempie hit con i dettagli. out è il modo in cui un metodo C# restituisce un valore aggiuntivo tramite una variabile che gli fornisci. Questo telemetro registra a cosa è puntato e quanto dista quando premi Space:

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        if (Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, 50f))
        {
            Debug.Log(hit.collider.name + " is " + hit.distance + " units away");
        }
    }
}

Puntato verso un muro la cui faccia anteriore si trova a 12 unità di distanza, registra Wall is 12 units away. Gli altri campi: hit.point è il punto nel mondo in cui il raggio ha toccato la superficie, hit.normal è la direzione verso cui è rivolta la superficie in quel punto ((0, 1, 0) su un terreno pianeggiante) e hit.transform è il Transform dell'oggetto colpito. Tramite hit.collider.gameObject puoi raggiungere qualsiasi altra informazione che lo riguarda, come il suo tag.

Leggi hit solo all'interno dell'if. Quando il raggio non colpisce nulla, Raycast restituisce false e hit non contiene nulla di utile: il suo collider è null.

challenge icon

Sfida

Medio

Aggiungi un mirino laser alla pistola. Lo script LaserSight è collegato alla pistola e l’Inspector gli assegna il dot rosso (un Transform) e un range di 15. Le frecce sinistra e destra ruotano la pistola.

  • A ogni frame, lancia un raggio dalla pistola nella direzione del suo forward, lungo range unità.
  • Quando colpisce qualcosa, mostra il punto e posizionalo esattamente nel punto in cui il raggio ha toccato la superficie.
  • Quando non colpisce nulla, nascondi il punto con SetActive(false).

Il Dot si trova sul layer Ignore Raycast, quindi il raggio attraversa il punto stesso. Premi Play e sposta il laser sulla parete, sulla cassa e sul barile, poi premi Check.

Provalo tu

using UnityEngine;

public class LaserSight : MonoBehaviour
{
    public Transform dot;
    public float range = 15f;

    void Update()
    {
        // Posiziona dot nel punto in cui il laser incontra una superficie; nascondilo quando il laser non colpisce nulla.
    }
}
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