Os materiais didáticos aqui disponibilizados estão licenciados através de Creative Commons Atribuição-SemDerivações-SemDerivados CC BY-NC-ND. Você possui a permissão para visualizar e compartilhar, desde que atribua os créditos do autor. Não poderá alterá-los e nem utilizá-los para fins comerciais.
Atribuição-SemDerivações-SemDerivados
CC BY-NC-ND
Cursos / Jogos Digitais / Desenvolvimento com Motores de Jogos I / Aula
Agora que o nosso personagem está deslizando por todo o cenário, precisamos alterar o script de movimentação, a fim de evitar a utilização de forças. Essa alteração substituirá, por um comando mais simples, toda a parte relacionada à adição de força (rigidBody.AddForce) e controle de velocidade máxima (rigidBody.velocity), sendo responsabilidade desse comando transmitir diretamente a tecla pressionada pelo jogador para a velocidade do nosso personagem. Da mesma maneira, quando não houver tecla pressionada, não haverá movimentação. A Listagem 1, a seguir, demonstra essa alteração, no método FixedUpdate do nosso script PlayerController.cs.
//Called in fixed time intervals, frame rate independent
void FixedUpdate() {
float moveH = Input.GetAxis ("Horizontal");
ani.SetFloat("speed", Mathf.Abs(moveH));
grounded = Physics2D.Linecast(transform.position, groundCheck.position,
layerMask);
ani.SetBool("grounded", grounded);
ani.SetFloat("vertSpeed", rigidBody.velocity.y);
if (moveH < 0 && movingRight) {
Flip();
} else if (moveH > 0 && !movingRight) {
Flip();
}
rigidBody.velocity = new Vector3 (maxSpeed * moveH, rigidBody.velocity.y, 0);
/*if (rigidBody.velocity.x * moveH < maxSpeed) {
rigidBody.AddForce (Vector2.right * moveH * acceleration);
}
if (Mathf.Abs (rigidBody.velocity.x) > maxSpeed) {
Vector2 vel = new Vector2 (Mathf.Sign (rigidBody.velocity.x) * maxSpeed,
rigidBody.velocity.y);
rigidBody.velocity = vel;
}*/
if (jumping) {
rigidBody.AddForce(new Vector2(0f, jumpSpeed));
jumping = false;
}
if (doubleJumping) {
rigidBody.velocity = new Vector2 (rigidBody.velocity.x, 0);
rigidBody.AddForce(new Vector2(0f, jumpSpeed));
doubleJumping = false;
}
}
Pronto! Comentamos toda a parte que era anteriormente relacionada à parte de movimentação, e adicionamos uma nova linha, a destacada em negrito, ao nosso script.
Essa linha altera diretamente a velocidade em X do personagem, através do atributo rigidBody.velocity, para uma multiplicação entre o maxSpeed e o moveH, sendo este último o valor do eixo horizontal do controle do jogador. Com essa alteração, a velocidade do personagem será máxima quando o botão estiver apertado totalmente, e zero quando o botão for solto. Assim, mesmo com o atrito zero que adicionamos ao nosso personagem, quando não houver botão pressionado, ele não se movimentará no eixo X.
Versão 5.3 - Todos os Direitos reservados