Aprendendo a programar jogos em Unity: concluindo o ciclo de cenas do game

Ajustaremos os elementos restantes do terceiro estágio, finalizando a construção do elo de ligação entre as demais fases do game.

em 16/03/2024
Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Continuando a caminhada rumo ao desenvolvimento de nosso primeiro platformer 2D, prosseguiremos corrigindo aspectos importantes da composição do terceiro estágio do game.


Caso seja a primeira vez que você acessa nossa série, o convidamos a juntar-se a nós nesta divertida trilha de aprendizagem. Por meio do desenvolvimento de projetos práticos de elaboração de games, iremos conhecer mais sobre a ferramenta Unity e como podemos utilizá-la para criar jogos de diversos gêneros.

A partir do primeiro tópico, você terá a oportunidade de aprender na prática como tirar do papel aquele game dos seus sonhos, cuja ideia mora há tempos dentro de seu coração. Abordamos desde a instalação e configuração da ferramenta Unity até aspectos envolvendo composição de cenas das fases de um jogo, posicionamento de elementos diversos e elaboração de scripts que controlam os comportamentos e as regras que queremos implementar em nossos projetos.


No momento, estamos desenvolvendo Motorista da Pesada, um platformer bidimensional cuja meta proposta ao gamer é coletar, no menor tempo possível, todas as caixas de presente espalhadas pelos cenários, utilizando-se para isso de um simpático carrinho, que será guiado infinitamente pelos caminhos dessa aventura.

Além de ter de ficar em alerta para não esquecer nenhum presente pelos caminhos, o jogador deverá se atentar aos perigos da aventura: a contagem regressiva do cronômetro, a presença de bombas posicionadas nas fases e as fatais quedas sem fim. É desafio na medida certa!

No tópico anterior de nossa jornada, iniciamos a construção do terceiro estágio do game, a partir dos desenvolvimentos realizados anteriormente para a segunda fase. Começamos a realizar a alteração da temática da fase, agora ambientada à noite, em uma agitada cidade.

Assim como nas grandes cidades reais do Brasil, em que crateras nas vias são um risco constante ao bom estado de conservação dos automóveis, implementamos em Motorista da Pesada vãos sem fim que podem abreviar nossa jornada. Temos muitas missões a concluir, então venha conosco e vamos juntos nesta jornada rumo a novos conhecimentos!

Trocando as plataformas

Dando sequência ao processo de personalização da nova fase urbana, vamos modificar a representação gráfica das plataformas para que fiquem mais próximas ao tema noturno da fase. Para isso, vamos primeiro reduzir a quantidade de GameObjects subordinados a Itens. Assim ficará mais fácil para administrarmos em quais posições iremos estacionar as plataformas e, também, os coletáveis do estágio.

Iniciaremos as modificações abrindo o Unity Hub e clicando duas vezes sobre o item referente ao projeto Motorista da Pesada. Na aba Project, abra a pasta Assets e, por fim, Scenes. Clique duas vezes sobre o ícone da cena Fase03 para iniciarmos a edição.

Na aba Hierarchy, remova alguns dos GameObjects subordinados a Itens, preservando apenas os descritos a seguir:
  • Plataforma01;
  • Chao01;
  • Chao02;
  • BloqueioCima;
  • Coletavel01; e
  • Bombinha01.
Agora, selecione Plataforma01 para realizarmos modificações em suas características visuais. Na aba Inspector, altere o parâmetro Sprite do componente Sprite Renderer para a imagem de nome “plataformas_A_0”. Também alteraremos a cor do parâmetro Color do mesmo componente para os valores R = 0, G = 119, B = 255 e A = 255, conforme exemplo a seguir:

Veja que, apesar de ser o mesmo sprite utilizado na composição visual de plataformas da primeira fase, a troca de tom de cor deu uma aura bem diferente ao elemento, parecendo de fato se passar em uma fase noturna.

Como o tamanho do novo sprite utilizado é maior do que o anterior, vamos ajustar os valores dos parâmetros Size de seu componente Box Collider 2D, para que a detecção das colisões físicas respeitem o que visualizamos na tela. Para tal, clique com o botão direito do mouse sobre o título do componente ("Box Collider 2D") e selecione a opção Reset.


Iremos agora determinar a posição de Plataforma01 na tela, modificando os valores dos parâmetros Position X e Y de seu componente Transform para -7 e 3.5, respectivamente. Os demais valores (Position Z e Rotation) devem ser mantidos com o valor zero, conforme imagem a seguir:

Com o posicionamento da primeira plataforma definido, vamos realizar a duplicação de Plataforma01. Na aba Hierarchy, clique com o botão direito sobre o GameObject e selecione a opção Duplicate. Renomeie o novo item gerado para “Plataforma02”, posicionando-o na lista logo após Plataforma01. Altere os parâmetros de seu componente Transform para os valores descritos a seguir:
  • Position X = -17.5, Y = 0.75, Z = 0; e
  • Rotation Z = 5.
Agora, iremos duplicar Plataforma02. Na aba Hierarchy, renomeie o clone para “Plataforma03” e posicione-o na lista logo após Plataforma02. Para variar um pouco a composição visual da fase, na aba Inspector, iremos alterar o parâmetro Sprite de seu componente Sprite Renderer para a imagem de nome “plataforma_B_10”. Altere os parâmetros de seu componente Transform para os valores descritos a seguir:
  • Position X = -12, Y = 3.5, Z = 0; e
  • Rotation Z = -5.
Assim como a situação verificada ao alterarmos o sprite de Plataforma01, precisamos ajustar as dimensões do Box Collider 2D para que correspondam às do novo sprite: clique com o botão direito do mouse sobre o título do componente ("Box Collider 2D") e selecione a opção Reset.

Coletáveis e bombas em ação

Talvez tenha dado para perceber que temos poucas plataformas no cenário, mas nem por isso a dificuldade será menor neste estágio de nossa aventura: posicionaremos pelos caminhos da fase cinco presentes e sete bombas de forma estratégica para que, associado ao vão sem fundo, seja bem mais difícil coletar os presentes sem perder preciosas vidas.

Iniciaremos esse processo duplicando por quatro vezes Coletavel01 e por seis vezes Bombinha01. Renomeie os novos elementos sequencialmente para formar, ao final, as listas ordenadas de GameObjects Coletavel01 a Coletavel05” e “Bombinha01 a Bombinha07”, conforme ilustrado a seguir:


Iremos alterar os parâmetros dos componentes Transform de todos os elementos coletáveis e bombásticos de nossa cena. A seguir, segue listagem dos parâmetros a serem modificados para cada GameObject:
  • Coletavel01:
    • Position X = -17, Y = -2; e
    • Rotation Z = 0.
  • Coletavel02:
    • Position X = -16, Y = 1.73; e
    • Rotation Z = 5.
  • Coletavel03:
    • Position X = 11, Y = 4.46; e
    • Rotation Z = -5.
  • Coletavel04:
    • Position X = -5.5, Y = 4.35; e
    • Rotation Z = 0.
  • Coletavel05:
    • Position X = 6.03, Y = -2; e
    • Rotation Z = 0.
  • Bombinha01:
    • Position X = -5.15, Y = 3; e
    • Rotation Z = 240.
  • Bombinha02:
    • Position X = 9.35, Y = 4.55; e
    • Rotation Z = 10.
  • Bombinha03:
    • Position X = -7.6, Y = -2.1; e
    • Rotation Z = 60.
  • Bombinha04:
    • Position X = 4.6, Y = -2; e
    • Rotation Z = 0.
  • Bombinha05:
    • Position X = -22.7, Y = -2; e
    • Rotation Z = 0.
  • Bombinha06:
    • Position X = 13.8, Y = 3.25; e
    • Rotation Z = 180.
  • Bombinha07:
    • Position X = -15.5, Y = 0.5; e
    • Rotation Z = 230.
Para finalizarmos os ajustes relativos aos coletáveis, às plataformas e às bombinhas do terceiro estágio, selecione todos os elementos subordinados a Itens (com exceção de BloqueioCima) e, na aba Inspector, conceda os valores descritos a seguir para os parâmetros do componente Mov Fundo, garantindo que tanto o chão quanto os outros elementos “da frente” do cenário andem no mesmo compasso:
  • Velocidade = 0.2;
  • Limite Min = -23; e
  • Limite Max = -22.

Ajustes finais na terceira fase

Completando o pacote de intervenções que iremos realizar no terceiro estágio do game hoje, vamos realizar dois ajustes pequenos, porém interessantes.

O primeiro, de caráter visual, tem a ver com a questão do contraste entre elementos da tela e o fundo da fase. Note que a cor do objeto mais à esquerda dentre os que representam as vidas restantes da partida é muito semelhante ao tom adotado pela imagem de fundo.

Para não descaracterizar o contador de vidas, iremos adicionar uma pequena borda ao elemento visual em questão. Na aba Hierarchy, selecione o GameObject Vida01, subordinado a ContadorVidas (que, por sua vez, é subordinado a CanvasFase). Na aba Inspector, clique sobre o botão Add Component e adicione um componente do tipo Outline. Modifique o parâmetro Effect Color do referido componente para a cor preta semitransparente (R = 0, G = 0, B = 0 e A = 128).

Por fim, o segundo ajuste a ser realizado é de caráter sonoro: na aba Hierarchy, selecione o objeto FundoSonoro e, na aba Inspector, troque o parâmetro AudioClip de seu componente Audio Source para o som de nome “musicaCidade”. Ajuste o volume do som a seu gosto.

Depois de tão extensas alterações na fase, que tal experimentarmos sua execução? Vá até a aba Game e pressione Play para curtir o novo estágio dessa aventura:

Ao final da execução da simulação, pressione novamente Play e retorne à aba Scene.

Nova fase concluída

Para concretizarmos a elaboração da fase e a inserção de sua cena na lista de estágios do game, abra o menu File e selecione a opção Build Settings. Na janela que for aberta, clique sobre a opção Add Open Scenes.

A cena Fase03 será listada logo após as demais, como ilustrado a seguir. Por fim, feche a janela Build Settings.

Dessa forma, inserimos efetivamente Fase03 no circuito de fases do game, fechando o ciclo de estágios que elaboramos no começo do desenvolvimento de Motorista da Pesada:

Salve a cena (menu File, Save) e o projeto (menu File, Save Project) antes de fechar o Unity.

Próximos passos

Parabéns pela elaboração do último estágio do game! O caminho foi árduo, mas, a partir do momento em que começamos a assimilar diversos conceitos importantes do processo de desenvolvimento dos elementos de uma fase, pudemos perceber que, a cada etapa vencida, levamos menos tempo para concluir a criação do estágio seguinte.

Três fases concluídas, placar operacional, cronômetro funcionando, coletáveis em dia... Está tudo em ordem, então será que já finalizamos a criação do game? Pois bem, ainda não!

Talvez, em algum momento do desenvolvimento, você tenha percebido que existem alguns itens bem “suspeitos” ainda não utilizados no projeto, presentes na pasta Imagens:

No próximo encontro, além de concluirmos alguns ajustes finos que estão pendentes, teremos a estreia de um personagem “da pesada” nas fases de nosso projeto.

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

Revisão: Ives Boitano
Siga o Blast nas Redes Sociais

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. Você pode compartilhar este conteúdo creditando o autor e veículo original (BY-SA 3.0).