RaycastHit
Parte da seção Física e jogabilidade do Journey de Unity da Coddy. Lição 34 de 63.
Physics.Raycast também pode informar o que atingiu. Adicione out RaycastHit hit após a direção: quando o método retorna true, ele preenche hit com os detalhes. out é a forma como um método C# devolve um valor extra por meio de uma variável que você fornece. Este telêmetro registra para onde está apontado e a que distância 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 está a 12 unidades de distância, ele registra Wall is 12 units away. Os outros campos: hit.point é o ponto no mundo onde 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 terreno plano), e hit.transform é o Transform do objeto 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.
Desafio
MédioDê à arma uma mira a laser. O script LaserSight fica na arma, e o Inspector atribui a ele o dot vermelho (um Transform) e um range de 15. As setas para a esquerda e para a direita giram a arma.
- A cada frame, lance um raio da arma na direção para a qual ela está apontada, com
rangeunidades de comprimento. - Quando atingir algo, mostre o ponto e coloque-o exatamente onde o raio tocou a superfície.
- Quando não atingir nada, oculte o ponto com
SetActive(false).
O Dot está na camada Ignore Raycast, então o raio atravessa o próprio ponto. Pressione Play e passe o laser pela parede, pela caixa e pelo barril, depois clique em Check.
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.
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Física e jogabilidade
1Rigidbody
Gravidade e MassaEmpurrar com AddForcePular com um ImpulsoFixedUpdate para FísicaVelocidadeCorpos CinemáticosRevisão: Plataforma de Lançamento2Colisões
OnCollisionEnterO que eu acertei?Quebre no impactoNo chãoQuique e atritoFormas dos collidersRevisão: Parede destrutível5Projeto: Corrida das Moedas
A Bola RolanteMoedas para Coletar