Physics.Raycast
Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 35 de 71.
Un raycast dispara una línea invisible desde un punto en una dirección e informa si ha chocado con un colisionador. Physics.Raycast(origin, direction, maxDistance) devuelve true cuando hay un colisionador en la línea dentro de una distancia de maxDistance unidades, y false en caso contrario. Este coche frena cuando hay algo a menos de 2 unidades por delante del morro:
public float brakeDistance = 2f;
void Update()
{
if (Physics.Raycast(transform.position, transform.forward, brakeDistance))
{
Debug.Log("Brake!");
}
}transform.forward gira con el coche, así que el rayo siempre apunta hacia fuera desde el morro; Vector3.forward siempre apuntaría a lo largo del eje z del mundo. El rayo comienza en el centro del coche, dentro de su propio colisionador, y un rayo nunca informa de un colisionador en cuyo interior comienza, así que el coche no se detecta a sí mismo. Omite maxDistance y el rayo se prolonga para siempre: el coche frenaría ante una pared al otro lado del mapa.
Los rayos detectan colisionadores, no lo que se dibuja: un objeto con un Renderer y sin colisionador es invisible para ellos, y un colisionador de tipo trigger cuenta como un impacto. Mientras haces pruebas, Debug.DrawRay(transform.position, transform.forward * brakeDistance, Color.red) dibuja el rayo en la vista Scene de Unity.
Desafío
IntermedioHaz que la puerta de la tienda se abra cuando alguien esté debajo del sensor.
- En
Update(), compruebaPhysics.Raycast(transform.position, Vector3.down, reach): un rayo recto hacia abajo, dereachunidades de longitud, que se detiene sobre el suelo. - Cuando sea verdadero, llama a
door.SetActive(false);y, en elelse, adoor.SetActive(true);.
Pulsa «Jugar» y lleva al visitante debajo del sensor: la puerta se abre y se cierra detrás de él. Después, pulsa «Comprobar».
Pruébalo tú mismo
using UnityEngine;
public class DoorSensor : MonoBehaviour
{
public GameObject door;
public float reach = 3f;
void Update()
{
// Abre la puerta mientras el rayo que apunta hacia abajo desde el Sensor impacte contra algo.
}
}
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