1
resposta

[Bug] [Bug] 09 Mão na massa: alterando a movimentação da personagem de transform para rigidbody

Acredito que tenha um erro nesse código que foi solicitado a alteração:

Vector2 vectorMoveDirection = new Vector2(moveDirection, transform.position.y);
rigidbody.velocity = vectorMoveDirection * moveSpeed;

Estamos multiplicando a posição do personagem em Y pela movespeed dele, caso o player esteja em uma posição de Y positivo, ele irá subir sem parar (sem necessidade do pulo) e em uma posição com Y negativo, irá cair rapidamente pela gravidade + movespeed. Portanto, pulo e movimentação estão correlacionados nesse código. Acredito que o ideal seria separar dessa forma:

private void Update()
    {
        float moveDirection = GameManager.Instance.InputManager.Movement;
        rb.velocity = new Vector2(moveDirection * playerSpeed, rb.velocity.y); 
    }

private void HandleJump(){
        if(!isGroundedChecker.isGrounded())
            return;
        rb.velocity = new Vector2(rb.velocity.x, jumpForce);
    }
    

Aqui temos um problema, pois ao pular, iremos manter a velocidade em X, portanto o personagem irá passar a ter a mesma velocidade, porém irá andar na diagonal, fazendo com que percorra uma distância mais rapidamente. Acredito que possa ser uma escolha de game design do jogo, para ajustar, se não me engano temos que dividir o eixo x por 1,4 (raiz de 2). Seria isso mesmo?

Gostaria da resposta de um monitor para confirmar, pois possa ser que eu esteja falando bobagem.

1 resposta

Olá, Lucas.

Tudo bem?

É interessante que você tenha notado isso no código fornecido pelo curso. O primeiro exemplo pode ter sido simplificado para fins educacionais, mas em jogos mais complexos como um metroidvania 2D, é legal separar claramente as lógicas de movimento horizontal e vertical conforme você fez. Isso não só permite um controle mais preciso do personagem, mas também evita comportamentos inesperados, conforme você apontou.

No segundo exemplo que você trouxe, ao separar o movimento horizontal do pulo, você está seguindo uma abordagem mais adequada para um jogo onde a jogabilidade precisa ser mais controlada. Quanto à questão da velocidade diagonal ao pular, é importante considerar como essa mecânica se integra ao design do seu jogo. A divisão por 1,414 (raiz de 2) é um método comum para preservar a velocidade total do personagem ao pular na diagonal, sem adicionar velocidade adicional.

É válido adaptar o que aprendemos nos cursos às especificidades do nosso próprio projeto. Se você identificou uma oportunidade de melhorar a separação entre as lógicas de movimento no código, isso pode ser uma decisão acertada para garantir uma jogabilidade mais consistente e controlável. Top! Top!

Espero que isso ajude a esclarecer suas dúvidas! Se precisar de mais alguma coisa, estou à disposição para ajudar.

Abraços,

Renan.