Alterando o Nosso Jogo para Conter o Pulo

Adicionando uma Limitação de Velocidade

A primeira coisa que faremos será relacionada à velocidade máxima do jogador. Deixar o player sem uma velocidade máxima pode ser perigoso, concordam? Logo, logo ele estará mais rápido do que podemos controlar e aí tudo perderá um pouco do sentido. Veremos, então, na Listagem 2, como limitar a velocidade dele de uma maneira a não destruir muito o motor de física 2D, como discutimos em aulas anteriores!

Listagem 2 - Código para adicionar uma limitação à velocidade máxima.

Ok. Temos algumas coisas novas e legais para conversar agora. Primeiramente, criamos uma nova variável pública do tipo float chamada maxSpeed. Essa variável serve para nos indicar qual a velocidade máxima que o personagem poderá atingir (duh!).

Em seguida, já na função FixedUpdate, movemos o nosso AddForce para dentro de um IF. Esse IF é bem claro e faz justamente o que nós queremos neste momento da aula: limitar a velocidade máxima. O teste a ser feito diz respeito a se a velocidade na direção desejada for menor que a velocidade máxima, adicione a força. Com isso, já melhoramos o nosso limite de velocidade, mas ainda há um ponto importante que pode acontecer devido a fatores externos, ou qualquer outra coisa: e se a velocidade passar da máxima? Devemos reduzi-la para a máxima.

Justamente para lidar com esse problema, adicionamos o segundo IF visto em nossa listagem. Esse IF traz duas novas funções que não havíamos lidado ainda: Mathf.Abs e Mathf.Sign. Assim como em Java, existem bibliotecas em C# para lidar com funções matemáticas simples. Essas são duas dessas funções.

A primeira delas, Mathf.Abs, nos retorna o Abssolute Value de um valor, ou seja, o módulo. Essa função equivale à função matemática módulo.

Já a segunda, a função Mathf.Sign, nos retorna um valor de acordo com o sinal do valor que passamos a ela. Se o valor passado for negativo, retorna-se -1. Caso o valor seja positivo ou zero, retorna-se 1.

E para quê nós utilizamos essas funções nesse IF? A primeira delas, Mathf.Abs, serve para nos retornar o valor absoluto da velocidade em X do personagem. Caso o personagem esteja se movendo na direção negativa do eixo, esse valor será negativo, correto? Para compararmos adequadamente esse valor com a velocidade máxima, utilizamos o módulo! Se a velocidade (independentemente da direção) for maior que a velocidade máxima, temos um problema a tratar!

E aí, dentro do IF, tratamos esse problema. Como? Utilizamos Mathf.Sign para saber a direção na qual o personagem estava se movendo! Então, simplesmente alteramos a velocidade atual dele para ser a máxima, na direção que ele estava indo! E pronto. Com essas alterações, conseguimos limitar a velocidade do player para nunca passar da velocidade máxima!

Em síntese, adicionamos dois IFs ao nosso código. O primeiro só adiciona velocidade se o personagem estiver abaixo da máxima. Já o segundo cuida de, se o personagem estiver acima da velocidade máxima, reduzi-la até esta. Feito! Agora o personagem já se move adequadamente no eixo X. Para movê-lo no eixo Y, partiremos agora para o universo dos pulos!

Versão 5.3 - Todos os Direitos reservados