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!