Compendium - Movimento Plataforma 3D

Nesse arquivo você vai aprender a como criar um personagem que se move estilo plataforma no Godot. Jogos desse gênero são conhecidos pela câmera no modo 2D e pelo movimento do personagem que apenas pula e anda para direita e esquerda. Em alguns casos ele também pode se mover para cima e para baixo também.

Vamos começar criando o personagem, que será apenas uma cápsula no Godot. Na cena dele a estrutura geral será:

KinematicBody

O node KinematicBody é ideal para movermos o personagem, pois a sua estrutura é feita para isso. O MeshInstance serve para adicionarmos uma malha em 3D dentro da cena, e por fim o CollisionShape serve para adicionar um colisor ao objeto.

Programando a Movimentação 

Depois salve a cena e crie um script no node raiz do Player (Não se esqueça de renomear também seus nodes). Vamos primeiro programar os movimentos de andar para direita e esquerda. Primeiro precisamos de três variáveis: uma vai guardar o vetor de direção do personagem, uma para o movimento e outra vai ser utilizada para controlar a velocidade:

Na função _physics_process(delta) vamos utilizar as condições para comparar se apertarmos uma tecla, o personagem se mexe na direção em X utilizando a variável de velocidade multiplicada por delta:

 Lembre-se que o delta é o valor de tempo em milisegundos que o processador realiza todo o processo dentro do jogo. Ele é muito importante, pois faz com que todas as máquinas que rodarem o programa tenham o mesmo tempo de execução.

O personagem ainda não vai andar, pois precisamos aplicar o valor da variável dir dentro

da variável de movimento:

Agora com o valor passado a variável move, podemos aplicar o movimento dentro da função move_and_slide. Lembre-se que o primeiro valor  da função é o valor do movimento, e o segundo é a identificação do vetor do chão, ou seja, para onde o chão está apontado:

Dessa maneira o personagem já se move. Para testar, precisamos criar uma nova cena e dentro dela inserir uma câmera,o Player e uma plataforma:

Se você testar o game vai notar que o player anda sozinho, e isso não pode acontecer. Para resolver esse problema, basta zerar a todo momento o valor de direção do objeto dentro da variável dir:

Criando o Pulo

Agora o Player já consegue se mover para as direções que queremos, mas precisamos também fazer com que ele pule. Então vamos criar a gravidade inserindo duas variáveis, que servirão para armazenar o valor da gravidade, e outra para armazenar a força do pulo do Player:

Agora, na função physics_process vamos fazer com que a todo momento a gravidade seja aplicada ao Player, mas utilizando o eixo Y da variável move:

Testando o projeto você vai notar que o player está atravessando a plataforma. Isso se deve ao fato que de que ela não possui um colisor sólido. Para transformar a plataforma em sólido, selecione o node da malha e clique na opção MESH > CREATE TRIMESH STATIC BODY.

Agora o personagem consegue ficar em cima da plataforma. Por fim precisamos fazer apenas com que ele pule. No script, vamos programar para que quando uma tecla for pressionada, o Player pule utilizando o eixo Y da variável move com a variável jumpForce:

Veja que quando você testar, o pulo não vai sair perfeito. Se pressionarmos várias vezes a mesma tecla de pulo, o personagem irá pular sem parar. Precisamos fazer com que quando a tecla for pressionada e o personagem estiver tocando o chão, ele pode pular:

Seu personagem até aqui deve estar com toda a mecânica de plataforma montada. Agora basta usá-lo nos seus projetos e o incrementar com novas funcionalidades.