RaycastHit
Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 36 de 71.
Physics.Raycast también puede decirte qué objeto alcanzó. 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 a través de una variable que le proporcionas. Este telémetro registra hacia dónde 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. A través de 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: un punto rojo donde alcanza el láser.
- En
Update(), lanzaPhysics.Raycast(transform.position, transform.forward, out RaycastHit hit, range). - Cuando acierte, llama a
dot.gameObject.SetActive(true);y establecedot.position = hit.point;. - Cuando falle, llama a
dot.gameObject.SetActive(false);.
Pulsa «Jugar» y gira la pistola: el punto se desliza por la pared y las cajas. Después, pulsa «Comprobar».
Pruébalo tú mismo
using UnityEngine;
public class LaserSight : MonoBehaviour
{
public Transform dot;
public float range = 15f;
void Update()
{
// Coloca el punto donde el láser alcanza una superficie; ocúltalo cuando el láser no alcance nada.
}
}
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 lanzamiento4Corrutinas
InvocarInvokeRepeating y CancelInvokeTu primera corrutinaBucles en corrutinasDetener corrutinasRepaso: cuenta regresiva10Proyecto: Escape de la arena
La arenaCazadores2Colisiones
OnCollisionEnter¿Qué golpeé?Romper al impactarDe pie sobre el sueloRebote y fricciónFormas de los collidersRepaso: muro destructible5Proyecto: Carrera de Monedas
La pelota rodanteMonedas para recoger3Disparadores
Colisionadores de tipo triggerOnTriggerEnterObjetos coleccionablesLas cajas guardan el restoZonas letalesEntrada y salidaRepaso: llave y puertaPractica por tu cuenta: Playground de Unity