RaycastHit
Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 34 de 63.
Physics.Raycast también puede decirte qué ha alcanzado. Añade out RaycastHit hit después de la dirección: cuando el método devuelve true, ha rellenado hit con los detalles. out es la forma en que un método de C# devuelve un valor adicional mediante una variable que le proporcionas. Este telémetro registra a qué apunta y a qué distancia está cuando pulsas Espacio:
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");
}
}
}Si apunta a una pared cuya cara frontal está a 12 unidades, registra Wall is 12 units away. Los demás campos: hit.point es el punto del mundo donde el rayo tocó la superficie, hit.normal es la dirección hacia la que está orientada la superficie en ese punto ((0, 1, 0) en terreno llano), y hit.transform es el Transform del objeto alcanzado. Mediante hit.collider.gameObject puedes acceder a cualquier otro dato sobre él, como su etiqueta.
Lee hit solo dentro del if. Cuando el rayo no alcanza nada, Raycast devuelve false y hit no contiene nada útil: su collider es null.
Desafío
IntermedioDale a la pistola una mira láser. El script LaserSight está en el arma, y el Inspector le asigna el dot rojo (un Transform) y un range de 15. Las flechas izquierda y derecha giran el arma.
- En cada fotograma, lanza un rayo desde el arma hacia delante, de
rangeunidades de longitud. - Cuando impacte, muestra el punto y colócalo exactamente donde el rayo tocó la superficie.
- Cuando no impacte con nada, oculta el punto con
SetActive(false).
El Dot está en la capa Ignore Raycast, así que el rayo atraviesa el propio punto. Pulsa Play y barre con el láser la pared, la caja y el barril; después, pulsa Check.
Pruébalo tú mismo
using UnityEngine;
public class LaserSight : MonoBehaviour
{
public Transform dot;
public float range = 15f;
void Update()
{
// Coloca dot donde el láser alcanza una superficie; ocúltalo cuando el láser no alcance nada.
}
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Física y jugabilidad
1Cuerpo rígido
Gravedad y masaEmpujar con AddForceSaltar con un impulsoFixedUpdate para físicaVelocidadCuerpos cinemáticosRepaso: plataforma de lanzamiento2Colisiones
OnCollisionEnter¿Qué golpeé?Romper al impactarDe pie sobre el sueloRebote y fricciónFormas de los collidersRepaso: muro destructible5Proyecto: Carrera de monedas
La bola rodanteMonedas para recoger