Tutorial: Criando um jogo de plataforma Unity – Parte 2

No último tutorial, criamos um projeto no Unity, colocamos nosso herói e criamos a movimentação dele. Aprendemos sobre como fazer animações e controlar os estados do personagem.

Nesse tutorial vamos continuar a trabalhar com a movimentação do personagem fazendo-o pular, mas também começar a criar a nossa primeira fase.

Espero que aproveitem, lembrando de curtir e participar com suas dúvidas e sugestões.

Pulo do personagem                             

Vamos começar com o pulo do personagem.

 

O que precisamos

Se você ainda não importou o Sprite de pulo, você pode adquiri-lo aqui.

 

Alterando a animação de quando o personagem não estiver em contato com o chão

Primeiro vamos identificar se o personagem está em contato com o chão. Se ele não estiver, vamos alterar o estado dele e animá-lo como se estivesse caindo.

Para isso vamos começar adicionando algumas linhas de código ao nosso HeroBehavior script.

Vamos adicionar 4 variáveis antes do método Start:

Code:
bool noChao = false;

public Transform chaoCheck;

float chaoRadius = 0.2f;

public LayerMask oQueEChao;

Com estas quatro variáveis verificamos o que se considera chão e vamos descobrir se o personagem está lá. Notem que algumas variáveis são “public” e outras não. O que isso quer dizer? Quer dizer que podemos acessá-las no unity, na seção do script no nosso personagem.

Vamos agora verificar se o personagem está no chão. Adicionem essas linhas de código dentro do método “FixedUpdate”. Adicionem nas primeiras linhas do método, pois elas serão a primeira coisa que vamos checar.

Code:
noChao = Physics2D.OverlapCircle (chaoCheck.position, chaoRadius, oQueEChao);

animator.SetBool ("NoChao", noChao);



A função OverlapCircle cria um círculo mágico que fica na posição “chaoCheck.position” e tem um raio de “chaoRadius” que fica verificando a cada frame se ele está em contato com o chão.

Para finalizar a parte de código vamos adicionar o comando de pulo do personagem. Lembram que trocamos o método Update para FixedUpdate? Pois é, precisamos criar o método Update de novo. Crie ele antes do método FixedUpdate:

Code:
void Update(){

}

Vamos verificar agora se o personagem está no chão e se o botão de pulo foi pressionado.

Adicione dentro do método Update as seguintes linhas de código:

Code:

if (noChao && Input.GetButtonDown ("Jump") ) {

animator.SetBool("NoChao",false);

rigidbody2D.AddForce(new Vector2(0,700));

}

A última linha de código que precisamos adicionar agora serve para passar para o nosso Animator a velocidade vertical do personagem e fazermos a animação do pulo funcionar. No método FixedUpdate adicione, depois da linha que passa, o valor para o parâmetro “NoChao”:

Code:

animator.SetFloat ("VelocidadeVertical", rigidbody2D.velocity.y);

Agora vamos voltar ao Unity e selecionar o objeto Hero e criar um GameObject vazio como filho do objeto Hero (GameObject -> Create Empty Child) e posicioná-lo embaixo do pé do personagem. Se você não selecionou o objeto Hero antes de criar o GameObject, você pode fazê-lo virar filho do objeto do herói clicando e o arrastando em cima do objeto Hero no painel de hierarquia. Vamos nomear esse objeto como ChaoCheck.

Se tudo deu certo, o painel de hierarquia deve ficar como na imagem.

Selecione o ChaoCheck e clique no quadradinho da imagem para adicionar um marcador para deixá-lo visível.

    

Selecione o objeto Hero, e no painel de inspeção, onde temos o script, note que podemos ver as nossas variáveis públicas. Antes de preencher essas variáveis, vamos primeiro separar o nosso herói em uma Layer diferente do resto do nosso jogo.

Clique em Layers -> Edit Layers… e adicione uma layer chamada Jogador. Clique de novo no objeto Hero no painel de inspeção, clique em Layer e selecione a nova layer criada. Caso o Unity pergunte se você quer que os filhos sejam movidos para essa layer, clique em Yes.

Vamos agora preencher as variáveis Chao Check e O Que E Chao. Para preencher o Chao Check, apenas clique e arraste o objeto Chao Check para o campo. E para preencher a variável O Que E Chao, clique no campo e selecione tudo menos a layer Jogador.

Pronto! Só está faltando a animação.

 

Blend Tree

No painel Animator, adicione um novo parâmetro chamado “NoChao” do tipo Bool e um parâmetro chamado “VelocidadeVertical” do tipo Float. Nós já estamos preenchendo-os no script. Se você executar o projeto verá que, quando o personagem encosta no chão, a caixa NoChao no painel Animator é marcada e, quando você aperta a barra de espaço, a velocidade do personagem aparece.

Note que ele vai dar pulos gigantes. Vamos corrigir isso indo em Edit -> Project Settings -> Physics2D. Onde tem o campo Gravity, vamos alterar o valor Y para -30. Por que isso? Jogos 2D tem uma física mais dinâmica onde as coisas acontecem mais rápido. Rode o projeto agora e veja a diferença!

Selecione o objeto Hero no painel de Hierarquia e agora vamos criar 11 animações para o pulo. Cada animação vai ter um Sprite de pulo.

Vá no painel Animation e Create New Clip, chame de Pulo1 e adicione o primeiro Sprite. Repita o processo até você usar todos os sprites. Siga a ordem jump_0 para o Pulo1, jump_1 para o Pulo2 e assim por diante.

Você vai ver que no painel Animator vão aparecer todos os pulos que a gente criou. Selecione-os e apague-os. Agora, clique com o botão direito no painel Animator, Create State, From New Blend Tree.

Clique com o botão direito em Any State, Make Transition e arraste até a Blend Tree. Coloque a Transition como NoChao, False. Clique com o botão direito em Blend Tree, Make Transition e arraste até o Idle. Coloque a Transition como NoChao, True.

Basicamente dissemos que podemos pular de qualquer estado e, quando o pulo acabar, devemos ir ao Idle.

Dê um duplo clique na Blend Tree e você verá que a janela irá mudar. Na janela de Inspeção note que o Blend Type está 1D, isso quer dizer que vamos usar apenas 1 parâmetro. Altere o campo Parameter para VelocidadeVertical. No campo Motion clique no símbolo de “+” e em add a motion field. Adicione 11 motions fields. Abra a pasta que você salvou as animações dos pulos, selecione os pulos e arraste um por um para cada motion field que criamos. Altere os valores do campo Threshold para que fique como na imagem.

Veja como a animação ficou legal. Pule na plataforma de cima e faça o personagem cair. Note que também temos animação para isso. Tudo isso graças a verificação para saber se o herói está em contato com o chão ou não.

 

Level Design

No papel

A próxima etapa é criação da nossa fase. Como tarefa de casa quero que você monte a sua fase no papel usando essa imagem como referência. Note que no inicio e no final da fase da imagem, há plataformas que se mexem.

Não se esqueçam de que se vocês quiserem ver esse e outros tutoriais em vídeo, acessem: http://www.patreon.com/fabricadejogos e colaborem. Sua ajuda é muito importante.

É isso, pessoas legais! Nos vemos no próximo tutorial! Não se esqueçam de comentar e curtir esse artigo!  smiley

Filipe Leal

Bacharel em Ciência da Computação pela UDESC e certificado como Microsoft Specialist. Atualmente trabalha como programador na Basecorp Learning Systems. Reside em Edmonton - Canadá. Faixa preta com 1o. grau em Pa-kua, tem preferência por jogos de Ação/Aventura, RPG, Luta e Party Games. Seu jogo favorito é The Legend of Zelda - Ocarina of Time.

Send this to a friend