Unidade - Corpos Rígidos e Física

O principal problema com as colisões no último capítulo foi com o código. We will now modify the values of the GameObject’s position directly. Estamos simplesmente adicionando um valor à posição, se o jogador estiver pressionando uma tecla. Precisamos de uma maneira de fazer o jogador se mover de tal forma que ele reaja adequadamente aos limites e outros GameObjects.

Para fazer isso, precisamos entender o que rigidbodiesestá. Corpos rígidos são componentes que permitem que um GameObject reaja areal-time physics. Isso inclui reações a forças e gravidade, massa, arrasto e momento.

Você pode anexar um Rigidbody ao seu GameObject simplesmente clicando em Add Component e digitando Rigidbody2D no campo de pesquisa.

Clicar em Rigidbody2D anexará o componente ao seu GameObject. Agora que está anexado, você notará que muitos novos campos foram abertos.

Com as configurações padrão, o GameObject cairá verticalmente downdevido à gravidade. Para evitar isso, defina oGravity Scale a 0.

Agora, jogar o jogo não mostrará nenhuma diferença visível, porque o GameObject não tem nada a ver com seu componente físico ainda.

Para resolver nosso problema, vamos abrir nosso código novamente e reescrevê-lo.

public class Movement : MonoBehaviour {
   public float speed;
   public Rigidbody2D body;
   // Update is called once per frame
   void Update() {
      float h = Input.GetAxisRaw(“Horizontal”);
      float v = Input.GetAxisRaw(“Vertical”);
      body.velocity = new Vector2(h * speed, v * speed);
   }
}

Podemos ver que criamos um referencea um Rigidbody2D nas declarações, e nosso código de atualização funciona nessa referência em vez da transformação do objeto. Isso significa que o corpo rígido agora recebeu a responsabilidade de se mover.

Você pode esperar o bodyreferência para lançar NullReferenceException, uma vez que não atribuímos nada a ela. Se você compilar e executar o jogo como está, irá obter o seguinte erro no canto inferior esquerdo do editor

Para corrigir isso, vamos considerar o componente criado pelo script. Lembre-se de que as propriedades públicas criam seus próprios campos no Unity, como fizemos com a variável speed.

Ajuste a velocidade para um valor mais alto, em torno de 5, e entre no jogo.

Suas colisões agora funcionarão corretamente!