GameDev

Aprendendo a programar jogos em Unity: inserindo plataformas e utilizando o pacote Sprite Editor

Vamos implementar as plataformas flutuantes de nosso game utilizando múltiplos sprites de um arquivo só.

Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Continuando o processo de criação de nosso platformer 2D, iremos inserir na cena de nossa fase inicial as plataformas flutuantes que irão compor o cenário a ser percorrido pelo carrinho.


Caso seja a primeira vez que você acessa nossa série, não se preocupe, acompanhando o conteúdo desenvolvido a partir do primeiro tópico da jornada você poderá aprender a instalar e configurar a ferramenta Unity, conhecer os conceitos básicos da codificação de games e elaborar novos e divertidos jogos a partir do zero, por meio dos diversos projetos que estamos propondo.

No tópico anterior começamos a povoar a cena da primeira fase em nosso projeto Motorista da Pesada; aos poucos iremos aprender mais sobre diversos aspectos técnicos da ferramenta. Venha conosco e vamos juntos nesta trilha rumo a novos conhecimentos!

Criando plataformas

Retomando o desenvolvimento de nosso projeto, abra o Unity Hub e clique duas vezes sobre o item referente ao projeto Motorista da Pesada.

Na interface inicial do Unity, na aba Project, abra a pasta Assets, Scenes e, por fim, clique duas vezes no ícone da cena Fase01. Nossa última atividade na cena foi a inserção do fundo de tela, cujos objetos ficaram subordinados ao GameObject Fundo.

Agora iremos iniciar a composição das plataformas que nosso carrinho irá percorrer no game para avançar no desafio. Para isso, selecione o objeto Itens (subordinado ao GameObject Cenario), clique com o botão direito do mouse sobre o item e, no menu, selecione Create Empty.


O nome do objeto criado será Plataforma01. Repita a mesma operação algumas vezes para criar os seguintes objetos:
  • Plataforma01 (já criado);
  • Plataforma02;
  • Plataforma03;
  • Plataforma04;
  • Plataforma05;
  • Chao01; e
  • Chao02.

Certifique-se de que todos os objetos criados estão subordinados ao GameObject Itens. Selecione todos eles e, na aba Inspector, clique em Add Component, opção Rendering e, por fim, adicione o componente Sprite Renderer.

Todos esses elementos receberão imagens a partir de itens disponíveis em nossa pasta Assets, mas antes teremos de realizar alguns ajustes nas imagens para que o Unity entenda o que queremos fazer com cada uma. Para isso, na aba Project, abra a pasta Assets, Multimidia e, por fim, Imagens. Selecione a imagem de nome "plataformas_A.png", conforme exemplo a seguir:

Observe na imagem a seguir os itens destacados em verde. Na aba Inspector, temos diversos parâmetros relativos à imagem que podem ser ajustados a fim de informar ao Unity como o item selecionado deve se comportar no game.


Por exemplo, o item Sprite Mode já foi ajustado com o valor Multiple, pois, se observar no exemplo a seguir, trata-se de um arquivo com múltiplos sprites preenchendo seu espaço. 

Outro parâmetro que iremos alterar posteriormente é o de nome Pixels Per Unit, que indicará ao game quais as proporções do sprite na tela de jogo; mas, por ora, temos que informar ao Unity quais as coordenadas de cada sprite dentro do arquivo. Para isso, ainda na aba Inspector, clique em Sprite Editor.

Package Manager

Como estamos utilizando o Unity pela primeira vez para criarmos nossos projetos dessa série, muito provavelmente o seguinte pop-up irá aparecer na tela assim que você clicar o botão indicado:


O Unity, assim como a maioria das ferramentas de programação em geral, é um sistema modular. Isso significa que podemos incrementar suas funcionalidades a partir da instalação de pacotes (ou, em inglês, packages). Um dos mais úteis no desenvolvimento de jogos 2D é o package Sprite Editor, que permitirá a nós informarmos ao Unity as coordenadas de cada sprite na imagem e, também, outras funcionalidades que iremos ver adiante ainda neste projeto.

Para instalar o pacote Sprite Editor, clique no menu Window e, por fim, em Package Manager, conforme ilustração a seguir:

O Package Manager é a interface que permite a nós instalarmos, adicionarmos ou removermos pacotes tanto para o núcleo da ferramenta Unity quanto para o projeto em si. Isso é interessante pois, em determinados casos, pode ser que você precise de uma funcionalidade específica em um projeto que é disponibilizada por meio de pacotes, tais como funcionalidades para permitir jogatina multiplayer online ou pacotes específicos para conexão a bancos de dados.

Em nosso caso concreto de hoje, instalaremos no registro do Unity (e não apenas para o escopo deste projeto) o pacote Sprite Editor. Para isso, clique no botão Packages e selecione o item Unity Registry

No campo indicado pela seta vermelha na imagem a seguir, digite "sprite" (sem as aspas). Logo, irá aparecer do lado direito da janela alguns itens; selecione 2D Sprite e clique em Install, no canto inferior direito da janela.

Pode ser que o processo de instalação demore alguns minutos, isso é normal. Ao término, perceba que um elemento verde aparecerá ao lado da versão do pacote, isso indica que a instalação ocorreu com êxito. Sendo assim, feche a janela do Package Manager clicando no ícone X no canto superior direito.

Sprite Editor

Agora que já temos o pacote Sprite Editor instalado corretamente, de volta à interface principal do Unity, certifique-se de que a imagem de nome "plataformas_A.png" ainda está selecionada na aba Project e, na aba Inspector, clique novamente em Sprite Editor. Uma janela irá ser aberta:

Uma das utilidades da ferramenta Sprite Editor é a de informar automaticamente ao Unity quais são os limites dos sprites que estão agrupados em um arquivo só; dessa forma poderemos selecionar qualquer um dos itens sem precisar recortar as imagens e salvar em arquivos diferentes utilizando um programa externo.

Para isso, iremos clicar no menu Slice (indicado em verde), deixar os parâmetros iguais aos indicados pelas setas na imagem a seguir e, por fim, clicar no botão Slice (indicado em laranja), no canto inferior direito da caixa de diálogo.

Experimente agora clicar sobre cada uma das gravuras. Veja que a ferramenta detecta automaticamente quais são os limites de cada uma e dá nomes automaticamente a todas. Para concluir essas alterações, clique no botão Apply e feche a janela.


Experimente agora, na aba Project, clicar na setinha ao lado do ícone da imagem que estamos editando. Observe que, agora, o Unity reconhece aquele arquivo de imagem como cinco sprites diferentes, o que é ótimo.

Agora que já temos os sprites separados, iremos alterar o parâmetro Sprite do elemento Sprite Renderer de cada um dos itens que representam as plataformas (de Plataforma01 a Plataforma05). Na aba Hierarchy, selecione individualmente cada um dos itens e faça a alteração para os parâmetros a seguir:
  • Plataforma01 - imagem do parâmetro Sprite: "plataformas_A_0";
  • Plataforma02 e Plataforma03 - imagem do parâmetro Sprite: "plataformas_A_1"; e
  • Plataforma04 e Plataforma05 - imagem do parâmetro Sprite: "plataformas_A_2".
Dessa forma, utilizando a ferramenta correta, conseguimos aproveitar diversos elementos presentes em um arquivo unitário.

Posicionamentos e movimentação

Na aba Hierarchy, clique duas vezes sobre um dos itens de plataforma para ver de perto como ficaram. Você poderá notar que estão com dimensões pequenas, então vamos aumentá-las por meio da modificação de um parâmetro da imagem original dos sprites.

Na aba Project, vá até a pasta Imagens (Assets, Multimidia, Imagens) e selecione o arquivo de imagem de nome "plataformas_A.png". Na aba Inspector, altere o valor de Pixels Per Unit de 100 para 25 (quanto menor o valor, maior as imagens dos sprites na tela), conforme exemplo a seguir:

Agora, sim, temos plataformas de tamanho decente! Então vamos distribuí-las pela tela; para isso, na aba Hierarchy, selecione individualmente cada um dos itens que representam as plataformas e, na aba Inspector, modifique os parâmetros de Position do Transform de cada um dos elementos para o indicado a seguir:
  • Plataforma01: X = -5, Y = 0 e Z = 0;
  • Plataforma02: X = 10, Y = 0 e Z = 0;
  • Plataforma03: X = 3, Y = 3 e Z = 0;
  • Plataforma04: X = -18, Y = 0 e Z = 0; e
  • Plataforma05: X = -10, Y = 3 e Z = 0.
Veja como as plataformas ficarão em nosso cenário após as modificações:

Você se lembra que, no tópico anterior, criamos um script de nome MovFundo, responsável pela movimentação contínua do fundo da tela a partir da detecção do pressionamento das teclas “seta para direita” e “seta para esquerda” pelo jogador? Iremos reaproveitar esse script para movimentar as plataformas também.

Para isso, selecione todos os objetos que representam as plataformas (de Plataforma01 a Plataforma05) e, na aba Inspector, insira o componente script Mov Fundo (botão Add Component, aba Script).

Para todos os objetos selecionados, os parâmetros de Mov Fundo serão Velocidade = 0.2, Limite Min = -23 e Limite Max = 18, conforme ilustração a seguir:


Teste a execução do jogo indo à aba Game e pressionando o botão Play. Experimente movimentar o fundo e as plataformas utilizando as setas do teclado ou as teclas A e D.

Apesar de haver uma movimentação interessante das plataformas, não há muita diferenciação entre suas velocidades de deslocamento em relação às velocidades dos elementos do fundo, e uma das “graças” de se implementar o efeito parallax aos objetos de um jogo 2D é observar o fundo se deslocando mais devagar do que o que está à frente. Então vamos ajustar a velocidade do fundo para que esse efeito fique mais aparente.

Interrompa a simulação da execução, pressionando novamente o botão Play. Volte à aba Scene e, na aba Hierarchy, selecione os GameObjects Parte1 e Parte2, subordinados ao objeto Fundo. Modifique o parâmetro Velocidade do componente Mov Fundo de ambos para 0.25.

Agora experimente novamente testar a execução do jogo. Ficou bem melhor, não concorda?

Finalize a simulação da execução, pressionando novamente o botão Play. Não se esqueça de salvar a cena (menu File, Save) e o projeto (menu File, Save Project).

Próximos passos

Mais um conjunto de elementos foi acrescentado ao nosso projeto, que está começando a tomar as formas de um interessante platformer 2D de verdade. Além disso, aprendemos a utilizar a ferramenta Sprite Editor e ajustar alguns parâmetros das imagens utilizadas em nosso projeto.

Em nossos próximos tópicos daremos sequência na inserção de itens que compõem nossa primeira fase do game, tais como o chão, os colisores e detectores. 

Nosso próximo texto já encontra-se disponível, continue conosco nessa jornada de conhecimento e fique ligado sempre aqui no GameBlast!

Revisão: Vitor Tibério

Entendo videogames como sendo uma expressão de arte e lazer e, também, como uma impactante ferramenta de educação. No momento, doutorando em Sistemas da Informação pela EACH-USP, desenvolvendo jogos e sistemas desde 2020. Se quiser bater um papo comigo, nas redes sociais procure por @RodrigoGPontes.
Este texto não representa a opinião do GameBlast. Somos uma comunidade de gamers aberta às visões e experiências de cada autor. Escrevemos sob a licença Creative Commons BY-SA 3.0 - você pode usar e compartilhar este conteúdo desde que credite o autor e veículo original.