Menu
CoddyTech

RaycastHit

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

Physics.Raycast può anche dirti cosa ha colpito. Aggiungi out RaycastHit hit dopo la direzione: quando il metodo restituisce true, ha riempito 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 a quale distanza si trova quando premi Spazio:

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 parte 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 relativa all'oggetto, 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: un punto rosso nel punto in cui arriva il laser.

  1. In Update(), esegui il raycast Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, range).
  2. Quando colpisce qualcosa, chiama dot.gameObject.SetActive(true); e imposta dot.position = hit.point;.
  3. Quando non colpisce nulla, chiama dot.gameObject.SetActive(false);.

Premi «Gioca» e gira la pistola: il punto scivola sulla parete e sulle casse. Poi premi «Verifica».

Provalo tu

using UnityEngine;

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

    void Update()
    {
        // Posiziona dot dove il laser incontra una superficie; nascondilo quando il laser non colpisce nulla.
    }
}

Tutte le lezioni di Fisica e gameplay

Esercitati da solo: Playground Unity