Devlog

Devlog 4: Novo visual e novos desafios

O devlog de hoje está cheio de mudanças: novo visual com níveis maiores do que as versões anteriores, mais frutas para coletar e mais inimigos para escapar. Nos parágrafos seguintes irei falar sobre todas essas mudanças e mais funcionalidades novas que adicionei nesta versão.

Novo Visual

Eu estava vendo os assets do pacote Sideview Fantasy Patreon Collection do Ansimuz, quando me deparei com esse novo tileset que me inspirou a trazer uma sensação diferente ao jogo. Com o novo ambiente a jogadora passa por cenários mais próximos ao céu dando uma vibe, ao mesmo tempo, mais fofa e desafiadora que a versão anterior. Afinal, a jogadora agora também tem que evitar cair das altas plataformas. 

Preview do novo tileset que estou utilizando para o jogo Yummy Sky Fruits

Níveis maiores

As versões anteriores começaram a me parecer pequenas para os desafios que eu queria colocar para a jogadora. Com a mudança do visual, decidi arriscar para cenários maiores, buscando também que a jogadora se sinta próximo da imensidão do céu. 

A partir dessa decisão eu tive que adequar a câmera, já que não seria mais possível visualizar todo o cenário como antes, pois a personagem ficaria pequena demais para ser vista. Assim, eu adicionei o pacote chamado Cinemachine, presente no Unity. Esse pacote permite controlar a câmera de forma que ela siga algum objeto do seu jogo, o qual eu escolhi que seguisse o personagem. Também criei um confiner para delimitar a área do jogo que poderia ser mostrada pela nova câmera. 

Imagem mostra todo o cenário do nível 1 do jogo Yummy Sky Fruits

Mais frutas, Mais inimigos

Para maior imersão no jogo também foi  necessário aumentar o número de elementos em comparação com as versões anteriores. Assim, eu peguei os assets de mais frutas e inimigos do mesmo pacote que eu já tinha pego os assets. Se você não se lembra de qual pacote estou me referindo, você pode conferir o primeiro devlog

Para adicionar esses novos elementos eu pude utilizar a mesma estrutura que eu já tinha das versões anteriores. O que me salvou muito tempo de retrabalho. Porém, posso dizer que foi uma experiência diferente decidir como encaixar cada elemento no cenário e pude pôr em prática meus conhecimentos  como Level Designer de forma mais desafiadora. Também tive que deixar a dificuldade mais equilibrada, não colocar muitos inimigos juntos, permitir que a jogadora respire de um obstáculo a outro. 

Plataformas móveis

Para montar o visual de uma cidade próxima às nuvens, eu adicionei ao nível 2 Plataformas Móveis. A movimentação delas ocorre bem semelhante a como criei a dos inimigos e a da serra no devlog anterior, adicionei dois pontos e fiz com que ao chegar a um dos pontos, a plataforma móvel tenha que voltar ao ponto anterior. 

A plataforma móvel traz um problema a mais na sua implementação, pois a jogadora deve ficar em cima da plataforma durante o jogo. No mundo real, se você subir em uma plataforma em movimento, o seu corpo irá seguir o movimento da plataforma. Então, o mesmo é esperado em um jogo de plataforma. No entanto, esse tipo de simulação não é tão fácil assim de implementar. O unity não sabe o que fazer quando o personagem está sobre uma plataforma em movimento, então o que acontece é que a personagem não segue o movimento da plataforma. O que é um tremendo problema quando estamos falando de um jogo com plataformas móveis.

Solução Utilizada para as Plataformas Móveis

Para isso, o mais recomendado é implementar um método que coloque o personagem da jogadora como um objeto filho do objeto plataforma. O que seria um problema fácil de resolver, caso o personagem colida com a plataforma, ou seja, esteja sob a plataforma. Basta, então, adicionar a plataforma com a qual a jogadora colidiu como o pai do objeto da personagem, utilizando o método SetParent.

No entanto, quando eu fazia isso o erro persistia, mesmo adicionando a personagem como filha do objeto plataforma, a personagem não seguia o movimento da plataforma. Assim, eu tive que encontrar uma nova solução para esse problema.

Ao mudar o tipo de rigidbody da personagem de Dynamic para Kinematic e adicionar manualmente a jogadora na plataforma, eu percebi que ela permanecia seguindo o movimento da plataforma. Porém, por ser Kinematic, a jogadora não conseguiria mais controlar o movimento da personagem com ela na plataforma. Logo, a personagem acompanhava o seu movimento, mas agora estava presa à ela. 

Para resolver esse novo problema, toda vez que a jogadora pressiona as teclas de movimento (esquerda/direita) ou a tecla espaço do teclado (pulasse), o código muda o tipo de rigidbody.

Assim, toda vez que a personagem está sobre a plataforma seu rigidbody muda de Dynamic para Kinematic. Porém toda vez que a personagem deve movimentar ou pular, seu rigidbody muda de Kinematic para Dynamic, mesmo estando sobre uma plataforma. Desta forma, foi possível que a personagem seguisse o movimento da plataforma em que estivesse e também não ficasse travada sobre a mesma.

Menu principal

Nas versões anteriores, a jogadora iria direto para o primeiro nível. Agora há um menu principal para apresentar o jogo antes da jogadora ir direto para a aventura. Outra novidade aqui é o novo nome do jogo, antes era Cute Platformer e a partir de agora passa a ser Yummy Sky Fruits. Fiquei animada com o novo nome e parece combinar mais com o jogo. Tanto para o menu quanto para o título do jogo, eu estou usando a fonte Bubbly Bold de VEXED.

gif mostrando o novo menu principal do jogo Yummy Sky Fruits

Mapa para acessar os níveis

Eu criei um protótipo para um mapa usando placeholders que eu mesma criei. O mapa aparece logo depois do menu principal e a jogadora pode escolher qual nível quer jogar. Ao terminar um nível, a jogadora também é levada de volta ao mapa para decidir qual será o próximo nível que irá jogar. Acredito que seja bom ter uma integração entre os níveis e o mapa me parece fazer bem esse trabalho.

Assim, a jogadora controla a personagem até um dos pontos em rosa, os quais possuem colliders que geram um trigger quando a personagem entra. A mensagem de interação então aparece e a jogadora pode escolher se era começar o nível ou não. Caso deseje ir para o nível escolhido, basta pressionar a tecla espaço do teclado.

Gif mostrando mapa que inclui nessa nova versão do jogo Yummy Sky Fruits

Transição entre cenas

Ao carregar um novo nível ou voltar ao mapa, eu criei uma animação de crossfade, que é uma imagem toda preta tampando a cena e que depois vai tendo seu canal alpha diminuindo, até deixar a cena ser visível novamente. Assim, sempre ao carregar uma nova cena, eu inicializo a animação. Todas as minhas cenas possuem essa animação tanto para início da cena quanto para fim do nível ou seleção de um novo nível no mapa.

Código do jogo

Se você gostou e quer conferir mais sobre esse projeto, o código está no meu github pessoal.

Devlog Anterior

Perdeu o devlog anterior? Então você pode ler sobre ele aqui.