Movimento do Jogador

Adicionando movimento ao jogador

Adicionando física

Colisão

Antes de adicionar a física, os objetos precisam ser capazes de interagir entre si, para isso os daremos um corpo físico

Corpo físico

  1. Selecione o seu objeto player
  2. Clique na opção “add component”
  3. Procure pela opção “Rigidbody 2D”

Esse componente permite modificar a gravidade, atrito, resistência do ar e outros parâmetros.

Colisões

Caixas de colisão definem o formato do corpo físico dos objetos, devem ser adicionadas tanto ao jogador como ao chão

  1. Vá nas características do objeto novamente
  2. Adicione um componente
  3. Procure por “Box Collider 2D”
  4. Clique para editar a caixa de colisão Botão de editar collider

  5. Tente deixar a caixa de colisão o mais próximo o possível do formato dos objetos

Ao rodar o jogo agora, o player terá gravidade e colidirá com o chão a cair, porém, ainda não temos controle sobre ele

Movimento por transform

Existem algumas formas de adicionar movimento ao jogador, a mais símples é utilizando o componente transform dos objetos, que dita sua posição dentro do jogo

Script

  1. Para criar um script, adicione um componente ao player com um nome original (ex.: “PlayerMovimentation”) e clique em New Script
  2. Abra o script recém criado
void Start()

Tudo dentro desta função irá rodar uma única vez quando o objeto for criado (ou quando a cena for carregada)

void Update()

Tudo dentro desta função irá rodar continuamente todo frame que o objeto estiver ativo

  1. Dentro de Update(), Insirá o seguinte código
void Update()
{
	transform.position += Vector3.right; // Move o player para a direita
}

⚠ Sempre salve quaisquer alterações feitas em scripts

Ao rodar o jogo, você deverá ver o player ir para a direita extremamente rápido, para controlar sua velocidade, podemos fazer a seguinte mudança

void Update()
{
	transform.position += speed * Vector3.right; // Move o player para a direita com velocidade controlada
}

E defina a variável speed como um float(número real) no início do script

public class PlayerMovimentation : MonoBehaviour
{
	public float speed = 0.1f; //velociade = 0.1
	  .
	  .
	  .
}

Variáveis definidas com “public” podem ser acessadas diretamente pelo editor Unity

Editando a variável durante execução

Inputs

  1. No canto superior esquerdo, clique em edit > Project Settings
  2. Na nova janela aberta, clique em Input Manager > Axes > Horizontal
  3. Defina os botões negativo e positivo com as teclas que quiser usar para mover o player para a esquerda e para a direita, respectivamente

Input Maganer

Para permitir que o player seja controlado pelo teclado, fazemos essa modificação dentro de Update()

void Update()
{
	var inputX = Input.GetAxis("Horizontal");
	// inputX = -1 se o player apertar o botão para mover para a esquerda
        //        =  1 para a direita
        //        =  0 se nenhum dos dois estiver sendo apertad

	transform.position += inputX * speed * Vector3.right; // Move o player horizontamente quando o botao de movimento estiver pressionado
}

Player sendo controlado pelo teclado

Movimento por Rigidbody2D

Outra maneira de fazer a movimentação do jogador é utilizando seu componente Rigidbody2D, que dita sua velocidade

Para poder interagir com o Rigidbody2D dentro do script, precisamos primeiro defini-lo como um componente da nossa classe

  1. Declare um novo componente público de tipo Rigidbody2D
    public class PlayerMovimentation : MonoBehaviour
    {
    public Rigidbody2D myrigidbody; // Cria uma variável que vai guardar as propiedades do componente RigidBody
    public float maxSpeed = 1f; // velociade maxima
    .
    .
    .
    }
    
  2. Dentro de Start(), escreva a seguinte linha
    void Start()
    {
     myrigidbody = GetComponent<RigidBody2D>(); // variavel é inicializada quando o jogo começa
    }
    
  3. Depois de salvar o script, no Unity você verá uma nova variável no componente script do jogador com um valor “None”. Para arrumar isso, clique e segure o RigidBody2D do jogador e leve-o até aquela caixa.

    Arrastando o componente

  4. Para movimentar o jogador através do Rigidbody2D, escreva o seguinte código em Update()
    void Update()
    {
     var inputX = Input.GetAxis("Horizontal");
      // inputX = -1 se o player apertar o botão para mover para a esquerda
         //        =  1 para a direita
         //        =  0 se nenhum dos dois estiver sendo apertad
    
     myrigidbody.velocity = new Vector2(inputX * maxSpeed, myrigidbody.velocity.y); // Atualiza o player horizontalmente todo frame
    }
    

Pulo

Para permitir que o player pule, ao invés de atualizar sua velocidade vertical todo frame como para o movimento horizontal, verificaremos primeiro SE o player está apertando o botão de pulo

  1. Dentro de Project Settings > Input Manager, vá em Jump e defina o botão positivo assim como feito anteriormente. (escreva “space” caso queira utilizar a barra de espaço)

  2. Dentro de Update(), adicione o seguinte código

    void Update()
    {
     var x = Input.GetAxis("Horizontal");
     myrigidbody.velocity = new Vector2(x*speed, myrigidbody.velocity.y); // Atualiza o player horizontalmente todo frame
    
     //Entra na condição enquanto o batão de "Jump" estiver pressionado
         if (Input.GetButton("Jump")) {
         Debug.Log("Você Pulou!"); // Escreve "Você Pulou!" no console
         }
    }
    

Quando apertarmos o botão de pulo, uma mensagem aparecerá no console de debug

Console de Debug

  1. Dentro da condição if, insira o seguinte código
    void Update()
    {
     var inputX = Input.GetAxis("Horizontal");
     myrigidbody.velocity = new Vector2(inputX * maxSpeed, myrigidbody.velocity.y); // Atualiza o player horizontalmente todo frame
    
     //Entra na condição enquanto o batão de "Jump" estiver pressionado
         if (Input.GetButton("Jump")) {
             Debug.Log("Você Pulou!"); // Escreve "Você Pulou!" no console
             myrigidbody.velocity += Vector2.up * jumpSpeed; // Acelera o player para cima todo frame
     }
    }
    

    E declare a variável jumpSpeed no início da classe

    public class PlayerMovimentation : MonoBehaviour
    {
     public float speed = 0.1f; // velocidade horizontal = 0.1
         public float jumpspeed = 0.5f; // velociade do pulo = 0.5
         public Rigidbody2D rigidBody; // cria objeto RigidBody2D
     .
     .
     .
    }