Desde o primeiro tópico da série, os projetos exploram diferentes etapas do processo de criação de aventuras digitais. O conteúdo vai da instalação e configuração da ferramenta no computador até a elaboração e a organização dos elementos que compõem os desafios do jogo, como personagens, inimigos, objetos, fases e regras.
Os conceitos apresentados nos encontros são explicados por meio de exemplos práticos aplicados aos projetos, o que permite replicar o aprendizado em projetos pessoais a partir das atividades realizadas na construção dos games.
Até o momento, a série já conta com dois games 2D finalizados: Forest Ping Pong, uma homenagem ao clássico Pong (Atari, 1972), e Motorista da Pesada, um platformer inspirado no arcade japonês City Connection (Jaleco, 1985).
Atualmente, o projeto em desenvolvimento é o Consultório do Dr. Tratanildo, um puzzle tridimensional ambientado em um curioso consultório médico. A mecânica do game se baseia, entre outros títulos, em clássicos dos anos 1980 e 1990, como Dr. Mario (Nintendo, 1990) e Pac-Man (Namco, 1980).
O processo de criação dos três jogos da série pode ser conferido nos textos correspondentes a cada projeto, por meio do índice disponibilizado na primeira publicação. Os dois primeiros games podem ser testados diretamente no navegador, por meio dos links compartilhados nas últimas postagens sobre eles.
Medicina em dobro
Uma das tarefas mais trabalhosas no desenvolvimento de um jogo é a maratona de sessões de teste, que serve para identificar bugs e comportamentos inesperados.
Por ser comum testar o game depois da implementação de novas funcionalidades, não é raro encontrar situações curiosas, como a aparição de um “clone” de Tratanildo Doencita após a conclusão do tratamento de um paciente, em determinadas condições.
O surgimento de um novo médico em cena não é um milagre da medicina, e sim o resultado de um bug que ocorre na etapa de distribuição das pílulas ao enfermo.
Durante a pré-visualização do labirinto, se as pílulas oferecidas erradicam os agentes de doenças, as instâncias adequadas de Tratanildo não são configuradas corretamente no cenário: acabam sendo ativadas tanto aquela usada no diálogo com o paciente quanto a empregada na coleta das pílulas pelo consultório.
Para eliminar esse comportamento estranho, abra o projeto para edição. No Unity Hub, clique duas vezes no 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 no ícone da cena ConsultorioScene.

Na aba Project, abra Assets e depois Scripts. Clique duas vezes no ícone do script ControllerFase para iniciar a edição no Visual Studio.

A correção do bug faz com que o game passe a verificar uma condição adicional durante a pré-visualização do labirinto, no momento em que as pílulas são concedidas ao paciente.
Normalmente, após os dois segundos de pré-visualização, o controle do médico volta ao jogador, para que ele decida explorar o labirinto ou manipular a inclinação do leito. Novos trechos de código serão adicionados ao script para que a liberação do controle aconteça apenas quando o tratamento ainda não tiver sido concluído.
Localize a função ProximaEtapa e, dentro da estrutura condicional switch (etapaAtual), insira a linha a seguir logo após a condição correspondente ao valor “Tratamento”:
etapaAtual = “CarregandoDialogoFinal”;

Em seguida, localize a Coroutine MostrarLabirintoPacientes. Dentro das chaves da função, substitua as últimas linhas conforme indicado.
De:
if (controlarLabirinto == false)
TransicaoParaTratamento(ehNovoTratamento);
Para:
if ((controlarLabirinto == false) && (etapaAtual != “CarregandoDialogoFinal”))
TransicaoParaTratamento(ehNovoTratamento);

Com as modificações, quando a função ProximaEtapa é executada, por exemplo, quando os agentes de doenças do labirinto se esgotam, a variável etapaAtual assume um valor que, por causa das novas verificações, impede o avanço para a exploração do labirinto e direciona o game ao estado correto, isto é, a conclusão do tratamento.
Outro comportamento indesejado acontece ao tentar finalizar o jogo com o mouse, clicando no botão “Voltar à tela inicial”, exibido na tela de vitória.

Diferentemente do que ocorre na tela de game over, o Collider criado em um objeto subordinado ao Canvas para captar os cliques e avançar nas conversas entre médico e pacientes não é desabilitado. A falha deixa o botão presente e selecionado, porém atrás de uma barreira invisível, o que permite acioná-lo somente com teclado ou controle de videogame.
Para resolver, ainda no script ControllerFase, localize a função AvancarProximaFase. No conjunto de códigos executado ao vencer os desafios, adicione a linha abaixo logo após a atribuição do valor “GanhouTudo” à variável etapaAtual:
objetoColliderCanvas.SetActive(false);

Com esse ajuste, o retorno à tela inicial depois de concluir o jogo passa a funcionar sem problemas com o mouse.
Salve o script, minimize o Visual Studio e retorne ao editor do Unity para seguir com as intervenções desta sessão.
Opções conflitantes
Nos encontros anteriores, o menu de opções de dificuldade e controles foi implementado com funções que gravam as preferências do jogador e as restauram em novas partidas. O game, porém, apresenta um comportamento estranho: a primeira visita à tela de opções ignora justamente a seleção de métodos de controle que não sejam teclado e mouse.

Esse bug ocorre por causa de um detalhe na implementação do script AjusteOpcoes. Para captar e atualizar o valor dos controles e dos níveis de dificuldade escolhidos pelo jogador, o código se vale de uma referência ao objeto selecionado no momento, o objeto toggleClicado, como recorda a imagem a seguir.

Também foi definido que o botão responsável por exibir a tela de opções, assim que acionado, faria o jogo selecionar a opção de teclado e mouse, para que o menu pudesse ser navegado com teclado ou controle de videogame.

Como efeito colateral dessas escolhas, na primeira exibição, os Toggles da tela de opções recebem os valores corretos, marcados ou vazios, de acordo com os dados em PlayerPrefs, e disparam a função AtualizarValores. Como, no instante inicial, o objeto selecionado é OpcaoMouse, o jogo entende que o controle a ser considerado é o de teclado e mouse.
Há diferentes formas de corrigir esse problema, como adotar outras referências no código diferentes da do objeto atualmente selecionado. Para simplificar, a solução será trocar o elemento selecionado na exibição da tela de opções do game.
Na aba Hierarchy, selecione o objeto BotaoOpcoes. Na aba Inspector, localize o componente Button atrelado a ele e, dentro do grupo da ação On Click, altere a entrada responsável pela seleção do Toggle OpcaoMouse:
- Objeto referenciado: Voltar, subordinado ao GameObject TelaOpcoes;
- Ação a ser realizada: Button.Select.

Com essa mudança simples, os problemas ligados às opções do jogo desaparecem, pois, na estrutura do script que atualiza as preferências de controles e de dificuldade, nenhuma ação será tomada caso o objeto selecionado não seja um dos Toggles referenciados.







