Cursos / Jogos Digitais / Desenvolvimento com Motores de Jogos I / Aula

arrow_back Aula 10 - Desenvolvendo a Primeira Fase - Parte 2

1. Redefinindo o Personagem

1.2 Alterando o Script de Controle

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.

x
1
//Called in fixed time intervals, frame rate independent
2
  void FixedUpdate() {
3
      float moveH = Input.GetAxis ("Horizontal");
4
5
      ani.SetFloat("speed", Mathf.Abs(moveH));
6
7
      grounded = Physics2D.Linecast(transform.position, groundCheck.position, 
8
      layerMask);
9
10
      ani.SetBool("grounded", grounded);
11
      ani.SetFloat("vertSpeed", rigidBody.velocity.y);
12
13
      if (moveH < 0 && movingRight) {
14
          Flip();
15
      } else if (moveH > 0 && !movingRight) {
16
          Flip();
17
      }
18
19
      rigidBody.velocity = new Vector3 (maxSpeed * moveH, rigidBody.velocity.y, 0);
20
21
      /*if (rigidBody.velocity.x * moveH < maxSpeed) {
22
          rigidBody.AddForce (Vector2.right * moveH * acceleration);
23
      }
24
25
      if (Mathf.Abs (rigidBody.velocity.x) > maxSpeed) {
26
          Vector2 vel = new Vector2 (Mathf.Sign (rigidBody.velocity.x) * maxSpeed, 
27
          rigidBody.velocity.y);
28
          rigidBody.velocity = vel;
29
      }*/
30
31
      if (jumping) {
32
          rigidBody.AddForce(new Vector2(0f, jumpSpeed));
33
          jumping = false;
34
      }
35
      if (doubleJumping) {
36
          rigidBody.velocity = new Vector2 (rigidBody.velocity.x, 0);
37
          rigidBody.AddForce(new Vector2(0f, jumpSpeed));
38
          doubleJumping = false;
39
      }
40
          
41
  }
Listagem 1 - Alteração na movimentação do personagem.
Fonte: Elaborada pelo autor.

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