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.
Desafio
MédioDê à arma uma mira a laser: um ponto vermelho onde o laser atinge.
- Em
Update(), faça o raycastPhysics.Raycast(transform.position, transform.forward, out RaycastHit hit, range). - Quando acertar, chame
dot.gameObject.SetActive(true);e definadot.position = hit.point;. - 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
1Rigidbody
Gravidade e MassaEmpurrar com AddForcePular com um ImpulsoFixedUpdate para FísicaVelocidadeCorpos CinemáticosRevisão: Plataforma de Lançamento4Corrotinas
InvocarInvocar repetidamente, Cancelar invocaçãoSua primeira corrotinaLoops em corrotinasInterrompendo corrotinasRevisão: contagem regressiva10Projeto: Fuga da Arena
A ArenaCaçadores2Colisõ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 ColetarPratique por conta própria: Playground de Unity