Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Depois de concluirmos, em nosso encontro anterior, as intervenções básicas necessárias para que seja possível jogar o game utilizando controles de videogame, vamos direcionar nossos esforços para implementar outras funcionalidades importantes de nosso projeto, começando pelos ajustes necessários para viabilizar a disponibilização de modo de dificuldade alta.
Se hoje for a primeira vez que você tem contato com conteúdos de nossa série, sinta-se especialmente convidado a juntar-se a nós em uma jornada de aprendizados sobre como ferramentas de desenvolvimento de jogos como a Unity podem nos auxiliar no processo de desenvolvimento de jogos digitais.
Por meio do desenvolvimento de projetos práticos, vamos experimentando métodos, técnicas e recursos normalmente utilizados por desenvolvedores do mundo inteiro na criação de jogos dos mais variados estilos gráficos e de gameplay.
A partir do primeiro tópico da série, são apresentadas as etapas envolvidas na elaboração de jogos 2D e 3D. Aspectos envolvendo a criação de fases, de regras e de metas de um game, configuração de personagens e de objetos, elaboração de menus e interfaces de interação são abordados durante nossos encontros.
Durante o desenvolvimento da série, completamos o desenvolvimento de dois jogos bidimensionais, Motorista da Pesada e Forest Ping Pong. Trata-se de games cuja elaboração presta homenagem a clássicos dos arcades e dos videogames, como Pong (Atari, 1972), e platformers menos conhecidos, mas com mecânicas de jogo interessante, como City Connection (Jaleco, 1985).
Atualmente, estamos trabalhando no projeto de criação de um puzzle ambientado em um consultório médico tridimensional: o excêntrico game Consultório do Dr. Tratanildo, cujos aspectos visuais e de gameplay se inspiram em jogos como Dr. Mario (Nintendo, 1990), Pac-Man (Namco, 1980) e Tama (Time Warner Interactive, 1994).
Vale muito a pena acompanhar os passos para a elaboração do três games, a partir do índice disponibilizado no primeiro texto da série. Também é possível experimentar, nos últimos textos relacionados aos dois primeiros jogos, os jogos completos, diretamente de seu navegador.
Caso tenha gostado da ideia de tirar do papel seus próprios jogos, não perca mais tempo: aperte os cintos e junte-se a nós em uma estrada repleta de novos conhecimentos e de muita diversão!
Conforme o tempo vai passando, e a intimidade do jogador com o game vai aumentando, é normal que os desafios propostos tornem-se mais fáceis, aos olhos do gamer. Para manter a “chama do desafio acesa”, muitos jogos permitem, de certa forma, aumentar o nível do desafio.
São várias as abordagens utilizadas para “apimentar o desafio”: em Tetris (Alexey Pajitnov, 1984), conforme o jogador vai eliminando os blocos, a velocidade de descida dos tetraminós vai sendo gradualmente aumentada; já em Super Mario Bros. (Nintendo, 1985), assim que os jogadores concluem o desafio principal, um novo modo é desbloqueado, permitindo aos vencedores repetir os desafios, modificando parâmetros envolvendo os adversários e o tempo para concluir as fases.
Em nosso jogo, o modo de dificuldade alta está disponível aos jogadores desde o princípio, bastando ao jogador ir ao menu de opções e escolher o nível de desafio desejado. O novo modo de dificuldade aplicará as seguintes alterações a estrutura de regras básica do jogo:
O tempo disponível para tratamento será reduzido em 1/4, em relação ao modo normal;
Os agentes de doenças percorrerão os caminhos do labirinto com velocidade 50% maior;
Pílulas de saúde, ao encostarem em agentes de doenças de cores diferentes das suas, serão eliminadas do labirinto e aumentarão a velocidade dos monstrinhos em questão; e
100 pontos extras serão concedidos ao jogador que conseguir concluir o tratamento.
Essas alterações na regra buscam fazer com que o jogador tenha uma margem menor para erros, recompensando-o com pontos adicionais, caso consiga cumprir os desafios propostos. Justo, não?
Para que as novas regras comecem a valer em nosso projeto, vamos realizar intervenções em scripts de nosso projeto. Para tal, vamos abri-lo para edição: no Unity Hub, clique duas vezes sobre o item referente ao projeto Consultório do Dr. Tratanildo. Na interface inicial do Unity, na aba Project, abra a pasta Assets e, em seguida, Scenes. Clique duas vezes sobre o ícone da cena ConsultorioScene.
Vamos começar as intervenções de hoje, modificando os comportamentos relacionados aos agentes de doenças. Na aba Project, abra a pasta Assets e, em seguida, Scripts. Clique duas vezes sobre o ícone do script ComportamentoDoenca para iniciarmos sua edição.
A primeira modificação envolverá a velocidade dos monstrinhos. Localize a função CaminharAgente e, logo após a primeira abertura de chaves da função, introduza o seguinte bloco de códigos:
// Aplicando fator de dificuldade à velocidade dos monstrinhos
float novoFatorDeslocamento = fatorDeslocamento;
Em seguida, dentro do bloco condicional switch (direcaoCaminhada), substitua todas as referências à variável fatorDeslocamento por novoFatorDeslocamento, conforme ilustrado pela imagem a seguir.
O uso da variável interna novoFatorDeslocamento servirá para que a adição de 50% sobre a velocidade dos monstrinhos entre em vigor somente enquanto o gamer escolher jogar com o nível de dificuldade elevado.
Ainda com o script ComportamentoDoenca em evidência, localize a estrutura da função TratamentoErrado. Anteriormente, deixamos apenas seu “esqueleto” no arquivo para marcar presença, com a indicação interna de que, em breve, iríamos implementar a função de fato. Pois bem, esse dia chegou, embora não tão “em breve” assim!
Substitua a mensagem “// Em breve” pelo conteúdo a seguir:
if (!iniciouProcessoDeTratamento && Geral.Dificuldade=="Alta")
// Aumenta a velocidade do agente de doenças
fatorDeslocamento = Mathf.Min(10, fatorDeslocamento + 2);
De forma semelhante ao implementado anteriormente para tratamentos corretos, a pílula será removida do labirinto, por meio de chamada à função Destroy(pilula). Dessa vez, porém, o monstrinho permanecerá à solta no labirinto, caminhando pelo cenário de forma mais rápida, por meio de alteração do valor presente em sua variável fatorDeslocamento.
O valor 10, presente dentro da função Mathf.Min, é um limiar máximo para o valor de velocidade a ser concedido ao agente de doenças. Caso queira alterá-lo, ou mesmo o passo de acréscimo (2), fique à vontade.
Salve o script e minimize o Visual Studio. De volta ao editor do Unity, com a pasta Scripts em evidência na aba Project, clique duas vezes sobre o ícone do script ControllerFase, para iniciarmos sua edição no Visual Studio.
A primeira intervenção no script envolverá alterações relacionadas ao tempo total de tratamento previsto para o desafio atual. Localize a função TransicaoParaTratamento e realize a ação descrita a seguir:
tempoRestante = TempoMaxTratamento[faseCorrente];
tempoRestante = TempoMaxTratamento[faseCorrente] * 0.75f;
O novo código aplicará uma redução na quantidade total de tempo estimada para o tratamento, dependendo do nível de dificuldade escolhido.
Em seguida, realizaremos um ajuste para conceder pontos adicionais aos corajosos jogadores que encararem o game em modo de dificuldade elevada.
Localize a Coroutine pacienteCurado e, dentro do conteúdo de suas chaves, procure pelos códigos responsáveis pela concessão de pontos ao jogador. Logo após o comando responsável pelo cálculo do valor de Geral.PlacarCorrente, introduza as linhas de código a seguir:
// Caso o jogo esteja em modo de dificuldade alta, 100 pontos adicionais serão concedidos, além dos já computados.
Por fim, salve o script e feche o Visual Studio. Retorne ao editor do Unity e experimente a execução de nosso projeto, indo à aba Game e clicando sobre o ícone do botão Play.
Note as diferenças práticas de dificuldade do jogo, experimentando inicialmente o game em modo de dificuldade normal.


