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.
Sfida
MedioAggiungi 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
rangeunità. - 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.
}
}
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