Avatar do usuário
The Doctor
Novato
Novato
Autor
Mensagens: 10
Registrado em: Qui Mai 26, 2016 8:57 pm
Karma: 42

Contato:

[Tutorial] Usando a função Raycast

Qui Mai 26, 2016 11:20 pm

Raycast

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:
Imagem
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# )
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
        }


Apenas com isso já consegue enviar um raycast na direção do mouse, se travar o mouse no centro da tela pode utilizar em jogos de primeira pessoa ou pode utilizar isso:
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


Qualquer erro por favor me avisar, estou escrevendo sem ajuda do compilador.
Uma coisa bem legal para acompanhar o Raycast é GetCompnent, Tag, Input:
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;
                   */
            }
        }

Caso utilizar TAG, lembre-se de criar ela e colocar no objeto.

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.
Editado pela última vez por The Doctor em Sáb Mai 28, 2016 1:38 am, em um total de 2 vezes.
Meus Assets na Unity
Main Menu Kit

Wilgner's Studio

Tags:
 
Avatar do usuário
Rodrigo Santiago
Colaborador
Colaborador
Mensagens: 279
Registrado em: Sáb Ago 22, 2015 8:17 am
Karma: 375

Re: [Unity][Tutorial] Usando a função Raycast

Sex Mai 27, 2016 8:13 am

Muito bom o tutorial, bem completo e explicado , falta só corrigir alguns bb codes ai que ficaram meio loucos.  :sorrir2: 

Tem algo que me incomodou : "Use e abusem dessa função(Extremamente leve)" 
Na verdade, raycast pode ser super leve ou extremamente pesado, depende do que você usar no jogo. Se seu jogo está cheio de Colliders simples ( Box, Capsule e Sphere ) ele será bem eficiente, por outro lado, se você usar muitos Mesh Colliders ou Terrain Colliders , ele será exponencialmente pesado. 
1
 
Avatar do usuário
The Doctor
Novato
Novato
Autor
Mensagens: 10
Registrado em: Qui Mai 26, 2016 8:57 pm
Karma: 42

Contato:

Re: [Unity][Tutorial] Usando a função Raycast

Sáb Mai 28, 2016 1:38 am

Rodrigo Santiago escreveu:
Muito bom o tutorial, bem completo e explicado , falta só corrigir alguns bb codes ai que ficaram meio loucos.  :sorrir2: 

Tem algo que me incomodou : "Use e abusem dessa função(Extremamente leve)" 
Na verdade, raycast pode ser super leve ou extremamente pesado, depende do que você usar no jogo. Se seu jogo está cheio de Colliders simples ( Box, Capsule e Sphere ) ele será bem eficiente, por outro lado, se você usar muitos Mesh Colliders ou Terrain Colliders , ele será exponencialmente pesado. 

Obrigado, desculpe a demora, estava no hospital.
Acho que resolvi todos erros de bbcode.
Sim estou referindo a colliders simples, só uso o Mesh quando for realmente necessário.
1
Meus Assets na Unity
Main Menu Kit

Wilgner's Studio
 
Avatar do usuário
Riccardoric
Membro
Membro
Mensagens: 24
Registrado em: Seg Set 14, 2015 1:46 pm
Karma: 6

Contato:

Re: [Unity][Tutorial] Usando a função Raycast

Sáb Mai 28, 2016 1:19 pm

Salve,

Gostei muito do tutorial :) Estarei esperando pelos outros. Só há uma coisa que não entendi, na parte do código : 
if (Physics.Raycast(ray, out hit, 100)) 

O que o "out" faz?

Obrigado.
 
Avatar do usuário
The Doctor
Novato
Novato
Autor
Mensagens: 10
Registrado em: Qui Mai 26, 2016 8:57 pm
Karma: 42

Contato:

Re: [Unity][Tutorial] Usando a função Raycast

Sáb Mai 28, 2016 8:24 pm

Riccardoric escreveu:
Salve,

Gostei muito do tutorial :) Estarei esperando pelos outros. Só há uma coisa que não entendi, na parte do código : 
if (Physics.Raycast(ray, out hit, 100)) 

O que o "out" faz?

Obrigado.

Obrigado, já que o hit é declarado como nulo o out seta um valor para ele.
Outra coisa(mais importante) é quando você precisa retorna dois ou mais valores, a função/método faz ele retorna verdadeiro ou falso mas não precisamos disso e sim com quem ele colídio ou o ponto que ele colídio, ele retorna isso para o hit.
Entendeu ?
Meus Assets na Unity
Main Menu Kit

Wilgner's Studio
 
Avatar do usuário
Riccardoric
Membro
Membro
Mensagens: 24
Registrado em: Seg Set 14, 2015 1:46 pm
Karma: 6

Contato:

Re: [Unity][Tutorial] Usando a função Raycast

Sáb Mai 28, 2016 8:48 pm

Ah eu acho que entendi. Pode dar outros exemplos bem básicos onde pode ser utilizado out, só para fixar melhor ^^

Obrigado, até mais!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes