Menu
CoddyTech

Physics.Raycast

Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 33 de 63.

Un raycast lanza una línea invisible desde un punto en una dirección e informa de si ha alcanzado un colisionador. Physics.Raycast(origin, direction, maxDistance) devuelve true cuando hay un colisionador en la línea dentro 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 su morro; Vector3.forward siempre apuntaría a lo largo del eje z del mundo. El rayo empieza en el centro del coche, dentro de su propio colisionador, y un rayo nunca informa de un colisionador en cuyo interior empieza, así que el coche no se detecta a sí mismo. Si omites maxDistance, el rayo se extiende 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 impacto. Mientras haces pruebas, Debug.DrawRay(transform.position, transform.forward * brakeDistance, Color.red) dibuja el rayo en la vista Scene de Unity.

challenge icon

Desafío

Intermedio

Haz automática la puerta de la tienda. El script DoorSensor está en el Sensor situado sobre la entrada, a 3.5 unidades del suelo. El Inspector le asigna door y un reach de 3.

  • En cada fotograma, lanza un rayo desde el Sensor directamente hacia abajo, de reach unidades de longitud.
  • Mientras el rayo golpee algo, la puerta está abierta: ocúltala con SetActive(false). Cuando no golpee nada, vuelve a mostrar la puerta.

El suelo queda fuera del alcance del rayo, así que la puerta permanece cerrada hasta que alguien se coloca debajo del Sensor. Pulsa Play y haz que el Visitante camine debajo con las flechas; después, pulsa Check.

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 proyectado hacia abajo desde el Sensor impacte contra algo.
    }
}
quiz iconPonte a prueba

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