Menu
CoddyTech

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.

challenge icon

Desafío

Intermedio

Dale a la pistola una mira láser: un punto rojo donde alcanza el láser.

  1. En Update(), lanza Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, range).
  2. Cuando acierte, llama a dot.gameObject.SetActive(true); y establece dot.position = hit.point;.
  3. 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

Practica por tu cuenta: Playground de Unity