Movimento da Camera, Como Criar Jogos : tutorial movimentação de camera para jogos FPS Unity C# | Curso jogo FPS parte 2

Nesse parte do curso vamos aprender a ajustar a camera, primeiro passo é adicionar uma camera virada para  afrente da nossa cpasula, posicionar ela corretamente onde será a nossa cabeça e jogar ela dentro do objecto capsule, lembre-se de renomear o objeto capsule para Player, isso vai facilitar a gestão do projeto mais adiante.


Bom antes de seguirmos o projeto fonte que você pode adquirir no final da pagina, junto com o curso completo em texto alem do projeto editavel compativel com unity 2018 ou superiores, quero falar que eu assumi uma identidade visual para o projeto retro com baixa resolução que remete a  pixelização, mas fique a vontade para fazer o projeto da forma que quiser, e caso adquira esse projeto fique a vontade para usar inclusive comercialmente ! 

Vamos A camera a camera ela será travada na movimentação Horizontal, porem ela vai se mover na Vetical com o movimento do Mouse.

Será necessario adicionar um Game Object Cube na mesma posição que a camera com um colisor ajustado como se fosse uma aste para frente, podemos desabilitar o render mesh para que esse objeto fique invisivel, transforme esse objeto como Filho do Player e jogue a camera dentro dele para ser filho dele ! 
Então a ordem vai ser assim Player - > Cube adicionado  -> Camera  um dentro do outro nessa ordem ! 

Porque fazer isso ? 
Fazendo assim deixamos a camera livre para fazer futuras animações nela, mesmo que tenha comandos de movimentação via script.

Dentro do Player vamos adiciona dois cubos com colisores marcados com Colission IS Trigger 

um cubo na parte superior da cabeça e outro na suposta parte inferior sendo o pé, esses colisores vão ser sensores futuros, vamos precisar criar uma TAG para esses sensores, eu criei uma tag chamada camera_cima e outra camera_baixo , e coloquei respectivamente no de baixo e no de cima..

Essas configurações basicas e de montagem eu vou colocar em video e focar o texto no codigo, então confere ai em baixo um video mostrando como configurar tudo certinho antes de irmos para  a programação :


Ok tudo configurado, confira os colisores, se estão marcados com Is Trigger e se você adicionou tambem fisica RigidBody e desmarque o Use Gravity e marque o is Kinematic.

ok se algo der errado temos o campo dos comentarios para tentarmos solucionar juntos !
Bora para codigo !  

Vou Criar um Script Chamado Camera_Player dentro da pasta Script Player que fizemos na aula anterior.

Lembra do objeto Pai da Camera ?  não o Player mas sim o Pai da Camera, eu coloquei o nome dele de Camera Controller, vamos colocar o codigo Camera Player dentro desse objeto e não dentro da camera, a camera precisa ficar livre para ideias futuras, aguarde , lembre-se que a camera deve ser filha desse objeto  Camera Controller conforme no video acima ! 



------------------------- codigo que vai no controlador da camera abaixo ----------------

public class Camera_Player : MonoBehaviour

{

public float Vel = 5.0f; // aqui vamos fazer uma variavel para controlar velocidade da camera

public bool cameracima = false;
        // aqui vamos ver se a camera chegou no limite de altura, ja que ela vai se mover para cima e para baixo
        // então vamos precisar limitar isso 

public bool camerabaixo = false;
        //Essa variavel vamos usar para saber quando a camera chegou no limite de olhar para baixo


    void Start()// Por enquanto não vamos usar nada na função Start     

    }

    void Update() {

        if(camerabaixo==false){
       // ok se a variavel camerabaixo for falsa então podemos mover ela para baixo.
        // se ela for verdadeira isso não acontece 

if(Input.GetAxis("Mouse Y")<-0.2){
                        // se a movimentação do mouse na vertical for negativa 
                        // ou seja, se estivermos puxando o Mouse para baixo....

transform.Rotate(1*Time.deltaTime*Vel,0,0);
                                
// Vamos transformar a rotação da camera frame a frame multiplicado pela Velocidade 
                                // velocidade essa determinada na variavel Vel, tudo isso no eixo X

}

}

if(cameracima==false){ // Aqui vai rolar a mesma coisa que lá em cima porem invertido 

if(Input.GetAxis("Mouse Y")>0.2){ // se o Mouse for puxado para cima....

transform.Rotate(-1*Time.deltaTime*Vel,0,0);
                                // vamos rotacionar a camera no eixo X porem para o lado oposto
                                // para funcionar para o lado oposto veja que multiplico tudo por -1

}

}

    }

void OnTriggerEnter(Collider other){
    
// Essa função é bem interessante, ela serve para você identificar colisão  com outros objetos

 

        if (other.gameObject.CompareTag("camera_baixo")){
        // nessa condição nos falamos se colidiu com outro objeto com a tag " camera_baixo" 
        // determinada ação deve acontecer

           camerabaixo = true;// no caso se colidiu com camera baixo então chegamos ao limite 
            //  se camera baixo for verdadeira então a camera não se move mais para baixo 

        }

if (other.gameObject.CompareTag("camera_cima")){
            // aqui é exatamente igual o decima porem focado no inverso do processo 

              cameracima = true;

        }

    }

void OnTriggerExit(Collider other){
      // nessa função vamos verificar se saimos da colisção usando OnTrigger Exit
     // entenda que se colidirmos nos travamos a movimentação da camera para determinada direção 
    // porem se deixamos de colidir precisamos liberar novamente suamovimentação 

        if (other.gameObject.CompareTag("camera_baixo")){

                   camerabaixo = false;

        }

if (other.gameObject.CompareTag("camera_cima")){

              cameracima = false;

        }

    }

}



Bom nesse codigo conseguimos determinar o movimento limite da camera, mas não apenas isso, aqui conseguimos aprender a usar colisores na unity, aprendemos a identificar colisão, e muito mais ! 
Tudo o que foi visto nesse codigo pode e deve ser desmembrado para ser reutilizado de diversas formas possiveis ! 


ufa chegamos ao final. é bem simples de se entender, porem é importante entender cada linha para saber oque está acontecendo, se ficou alguma duvida em algum codigo comenta ai que acrescento como comentario e observação ! 

No proximo artigo vou abordar a mecanica da arma, como atirar, como criar efeitos de tiro, controlar munição, recarregar e tudo mais,  e em seguida vamos evoluindo Caso queira testar esse projeto clique aqui >> http://rplaygames.com/game.php?Game=98

Caso queira me apoiar e adquirir esse conteudo completo, não só com todos os codigos e explicação detalhada mas tambem o projeto fonte editavel com todos os assets inclusos.

Clique Aqui para Adquirir o Curso Completo com os assets e um jogo completo para modificar ! 
 


Comentários