Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

[Tutorial] Usando a função Raycast

Tutoriais, videoaulas, guias e downloads para te ajudar nos estudos.
Avatar do usuário
The Doctor
Novato
Novato
Reações: 0
Mensagens: 10

Contato:

[Tutorial] Usando a função Raycast

Mensagem por The Doctor » 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# )

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
        }
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:

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
Qualquer erro por favor me avisar, estou escrevendo sem ajuda do compilador.
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; 
                   */
            }
        }
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

Avatar do usuário
Rodrigo Santiago
Colaborador
Colaborador
Reações: 0
Mensagens: 273

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

Mensagem por Rodrigo Santiago » 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. 

Avatar do usuário
The Doctor
Novato
Novato
Reações: 0
Mensagens: 10

Contato:

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

Mensagem por The Doctor » 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.
Meus Assets na Unity
Main Menu Kit

Wilgner's Studio

Avatar do usuário
Riccardoric
Membro
Membro
Reações: 0
Mensagens: 24

Contato:

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

Mensagem por Riccardoric » 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 : 

Código: Selecionar todos

if (Physics.Raycast(ray, out hit, 100)) 
O que o "out" faz?

Obrigado.

Avatar do usuário
The Doctor
Novato
Novato
Reações: 0
Mensagens: 10

Contato:

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

Mensagem por The Doctor » 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 : 

Código: Selecionar todos

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
Reações: 0
Mensagens: 24

Contato:

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

Mensagem por Riccardoric » 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!

Responder

Quem está online

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