Menu
CoddyTech

RaycastHit

Parte da seção Física e Jogabilidade do Journey de Unity da Coddy. Lição 36 de 71.

Physics.Raycast também pode dizer o que atingiu. Adicione out RaycastHit hit depois da direção: quando o método retorna true, ele preenche hit com os detalhes. out é a maneira de um método C# devolver um valor extra por meio de uma variável que você fornece. Este medidor de distância registra para onde está apontado e a que distância isso está quando você pressiona Espaço:

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");
        }
    }
}

Apontado para uma parede cuja face frontal está a 12 unidades de distância, ele registra Wall is 12 units away. Os outros campos: hit.point é o ponto no mundo em que o raio tocou a superfície, hit.normal é a direção para a qual a superfície está voltada nesse ponto ((0, 1, 0) em um chão plano), e hit.transform é o Transform do objeto que foi atingido. Por meio de hit.collider.gameObject, você acessa qualquer outra informação sobre ele, como sua tag.

Leia hit somente dentro do if. Quando o raio não atinge nada, Raycast retorna false e hit não contém nada útil: seu collider é null.

challenge icon

Desafio

Médio

Dê à arma uma mira a laser: um ponto vermelho onde o laser atinge.

  1. Em Update(), faça o raycast Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, range).
  2. Quando acertar, chame dot.gameObject.SetActive(true); e defina dot.position = hit.point;.
  3. Quando errar, chame dot.gameObject.SetActive(false);.

Pressione “Jogar” e vire a arma: o ponto desliza pela parede e pelas caixas. Depois, “Verificar”.

Experimente você mesmo

using UnityEngine;

public class LaserSight : MonoBehaviour
{
    public Transform dot;
    public float range = 15f;

    void Update()
    {
        // Posicione o dot onde o laser encontra uma superfície; oculte-o quando o laser não atingir nada.
    }
}

Todas as lições de Física e Jogabilidade

Pratique por conta própria: Playground de Unity