Tutorial: Criando um jogo de plataforma Unity – Parte 3

No último tutorial, fizemos nosso herói pular usando a técnica de Blend Tree, em que separamos cada frame em uma animação. Dessa forma, deixamos a velocidade vertical dele, durante o pulo, dizer qual a animação que irá acontecer.

Agora que temos a movimentação do nosso personagem, vamos criar a nossa primeira fase. Para isso, vamos primeiro transformar o nosso herói em um “prefab”. O que é um prefab?

Continue lendo conosco.

Para esse tutorial, vamos precisar dos sprites de terreno. Você pode adquiri-los ao lado. (Créditos a Kenney – http://opengameart.org/users/kenney)

Dica: Estou usando um Sprite de um site que possui várias coisas para desenvolvimento de games. Vale a pena dar uma olhada: http://opengameart.org/ .

 

 

Criando Prefabs

Para ajudar no desenvolvimento do jogo, é extremamente recomendado o uso de Prefabs. Os Prefabs nada mais são do que os objetos que criamos na nossa cena, salvos como Assets. Como assim?

Vamos usar o objeto Hero como exemplo. Da maneira que o projeto está hoje, se criarmos outra cena, vamos ter que recriar todo o nosso objeto Hero de novo. Não queremos isso, então salvamos o objeto como um Asset. Assim, sempre que precisarmos usá-lo, basta arrastá-lo para o painel de cena. Se fizermos alguma alteração no Prefab, essa alteração vai refletir em todos os objetos de todas as cenas. Se criarmos uma plataforma e a salvarmos como prefab, usando esses objetos para fazer várias plataformas durante o jogo. Se alterarmos o Sprite desse prefab, vai alterar todos as plataformas. Legal, não?

Agora vem a parte difícil. Como salvar o objeto no modo prefab? Vamos salvar o objeto Hero. Clique no objeto Hero no painel de hierarquia e arraste-o para a pasta Assets. Pronto.

Note que agora o objeto Hero ficou azul no painel de hierarquia e que, se o selecionamos no painel de hierarquia, aparecem alguns controles do prefab. Podemos fazer alterações específicas para cada objeto ou aplicar a todos eles.

Para deixar o projeto mais organizado, eu criei uma pasta chamada “Objetos” dentro da pasta Assets e arrastei o meu objeto Hero para ela.

Agora que temos o objeto Hero salvo, vamos criar uma nova Cena para ser a nossa Fase 1.

Criando uma Nova Cena

Para criar uma nova Cena, vá em File -> New Scene. Ele vai criar a cena, mas não vai salvar! É muito importante que você salve a cena. Salve com o nome de Fase 1. Você pode criar uma pasta dentro da pasta Assets chamada de “Cenas” para salvar as suas fases.

Criando uma nova fase

Lembra da tarefa de casa do tutorial passado? Então pegue o esboço que você desenhou para usar como referência.

Vamos importar os sprites de cenário.

Importando os Sprites 

A importação ocorre da mesma forma que os sprites do personagem. Arraste o arquivo tiles_spritesheet.png para dentro da pasta AssetsSprites.

Selecione o arquivo e altere o Sprite Mode para Multiple e o Pixels to Unit para 40.

Abra o Sprite Editor, clique em Slice e deixe o Type como Automatic e o Pivot como Center. Clique em Slice e depois em Apply. Pronto.

Criando a plataforma

Agora é hora de brincar de lego. Vamos arrastar e posicionar cada tile e montar o cenário. Para facilitar o desenvolvimento, vou criar alguns prefabs das plataformas. Comece arrastando 3 tiles para a cena: um tile para a borda esquerda, o outro para o meio e o último para a borda direita. Ele vai criar 3 objetos no painel de hierarquia. Nomeie cada um como TopoEsq, TopoMeio e TopoDir.

Selecione cada um deles e adicione um Box Collider 2D (Add Component -> Box Collider 2D).

Agora crie um prefab para cada um desses objetos.

Vamos fazer a primeira plataforma. Para isso vou usar:

·         1 inicio

·         1 fim

·         9 meios

Mexa bem e coloque no forno por 5 minutos. Posicione o início no local desejado. Segure a tecla “V” no teclado e você verá que, quando passa o mouse em cima de um tile, aparece uma bolinha em um dos cantos. Clique no canto superior esquerdo e arraste até encostar no tile do início. Você vai ver que ele vai se “encaixar” no tile. Repita o processo até ligar todos os tiles.

Crie um GameObject vazio e coloque os tiles da plataforma dentro dele e nomeie para Plataforma191. Salve-o como Prefab.

A minha próxima plataforma vou fazer com apenas 1 meio e nomeá-la como Plataforma111. E a plataforma móvel vou fazê-la com 1 meio e nomeá-la como PlataformaMovel.

Faça o resto do cenário repetindo o processo e reaproveitando os Prefabs que criamos. Utilize o mesmo objeto da Plataforma Móvel para todas as Plataformas Móveis.

Movendo a plataforma

Para movermos a plataforma, primeiro adicione o componente Rigidbody2D e marque a opção Kinematic. Isso vai impedir que forças da gravidade sejam aplicadas sobre ela. Agora crie um novo Script C# e o nomeie como PlataformaMovelBehaviour. Como cada plataforma vai se mover em uma distância diferente e talvez velocidades diferentes, vamos criar variáveis públicas para que possamos controlar cada uma delas individualmente. Vamos criar VelocidadeX e VelocidadeY para controlar a velocidade que ela vai se movimentar.

Vamos definir alguns limites para que a nossa plataforma vá e volte. Crie MaxX, MinX, MaxY, MinY.

 

Code:
public float MinY;
                public float MaxY;
                
                public float MinX;
                public float MaxX;
                
                public float VelocidadeX;
                public float VelocidadeY;

Agora dentro do método Start, inicialize a velocidade das plataformas.

Code:
void Start () {
      rigidbody2D.velocity = new Vector2 (VelocidadeX, VelocidadeY);
}



Dentro do método Update, vamos verificar se a plataforma chegou aos limites que definimos e vamos inverter a velocidade.

Code:
void Update () {

              if(transform.localPosition.y > MaxY)
                     rigidbody2D.velocity= new Vector2 (rigidbody2D.velocity.x, -VelocidadeY);

              else if(transform.localPosition.y < MinY)
                          rigidbody2D.velocity = new Vector2 (rigidbody2D.velocity.x, VelocidadeY);


              if(transform.localPosition.x > MaxX)
                   rigidbody2D.velocity= new Vector2 (-VelocidadeX, rigidbody2D.velocity.y);

              else if(transform.localPosition.x < MinX)
                          rigidbody2D.velocity = new Vector2 (VelocidadeX, rigidbody2D.velocity.y);
}



Dica: Use matemática para sincronizar as suas plataformas, mas de forma que elas não sejam impossíveis de subir. No meu exemplo, eu defini que cada plataforma irá se mover 10 unidades. Para isso, defini as posições delas e alterei o MaxY ou MinY para 10 unidades a mais ou a menos. Mesma coisa com o MaxX e MinX.

Testando

Para testar o cenário nesse momento, não podemos olhar para o painel Game. Temos que olhar o painel Scene, pois a nossa câmera ainda não acompanha o personagem.

Olhem como ficaram as plataformas se movendo:

Nesse tutorial deixei propositalmente um “bug” em uma das plataformas! Como vocês o arrumariam? Deixe seu comentário!

Vamos trabalhar com a câmera, informações na tela, o fluxo do jogo e, claro, a correção do “bug” no próximo tutorial!

Deixe seu comentário sobre os GIFs desse tutorial! Gostou? Compartilhe! 🙂

Não esqueçam 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!  🙂

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