O raycast é uma função muito útil e o que ele faz é bem simples, lança um raio de um ponto de originem em um direção até uma certa distancia e retorna verdadeiro ou falso caso colida com algum objeto. Todos objetos que conter o componente collider( Box, Capsule, Sphere, Mesh, etc...) ele pode ser atingido por um Raycast, para evitar alguma colisão com raycast você pode utilizar outra mask(mascara).
Para entender melhor fiz uma imagem demostrando como é em jogo:
O objeto azul: Lança o raycast
Raycast: Colide com outro objeto
Ao colidir o raycast retorna true(verdadeiro).
Alguns exemplos que pode ser feito com Raycast:
Abrir um porta, lança um raycast com a porta ao aperta botão do mouse e envia a função de Abrir_Fechar() por exemplo.
Criar um objeto, lança um raycast em direção ao terreno e instancia o objeto no x, y e z onde o raycast colídio.
Código para utilizar o Raycast: ( C# )
Código: Selecionar todos
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //Direção do raio
RaycastHit hit; //Cria um váriavel hit(onde ele bate)
if (Physics.Raycast(ray, out hit, 100)) //Primeiro argumento: Direção, Segundo: Váriavel para receber a colisão, Terçeiro: Distancia máxima do raio
{
print("Raycast colidindo!!!"); // Print no console para vê se está funcionando
}
Código: Selecionar todos
int x = Screen.width / 2;
int y = Screen.height / 2;
Ray ray = Camera.main.ScreenPointToRay(new Vector3(x, y)); // Direção do raio no centro da tela
Uma coisa bem legal para acompanhar o Raycast é GetCompnent, Tag, Input:
Código: Selecionar todos
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //Direção do raio
RaycastHit hit; //Cria um váriavel hit(onde ele bate)
if (Physics.Raycast(ray, out hit, 100)) //Primeiro argumento: Direção, Segundo: Váriavel para receber a colisão, Terçeiro: Distancia máxima do raio
{
if (Input.GetButtonDown("Fire1")) //Se o botão do mouse esquerdo for pressionado
{
// Componente
Porta objporta = hit.collider.GetComponent<Porta>(); //Verifica se o objeto tem o componente Porta
if(objporta != null){ //Se tiver
//Algo acontece
}
// Tag
if(hit.collider.tag == "porta"){ // Caso o objeto tenha a tag porta
//Algo acontece
}
/* Nunca na sua vida utiliza os 2 juntos, é a mesma coisa que declarar variável A = 5; e depois dizer que é 5;
private int a = 5;
a = 5;
*/
}
}
Tutorial feito por mim, fique a vontade para utilizar e modificar o código.
Bom acho que é isso. Caso tenha algo faltando ou tenha alguma duvida avise-me.
Use e abusem dessa função(Extremamente leve) quando utilizado com colliders simples.