Aprendendo a programar jogos em Unity: preparando elementos para controlarmos o labirinto

Iniciaremos codificações e configurações em nosso projeto para que possamos controlar o maquinário do leito.

em 23/11/2025
Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity! Após codificarmos, no encontro anterior, a exibição adequada de mensagens na barra superior do Canvas, começaremos a elaborar códigos e ajustes em cena para que, muito em breve, os jogadores possam controlar o maquinário atrelado à cama hospitalar, permitindo que os medicamentos de Tratanildo Doencita possam agir sobre os monstrinhos do labirinto, por meio de inclinações aplicadas ao leito.

Caso hoje seja a primeira vez que você acessa os textos de nossa série, considere-se convidado a nos acompanhar em uma divertida jornada de aprendizados sobre o universo do desenvolvimento de jogos digitais.

Por meio do uso da ferramenta Unity, entenderemos mais sobre os passos necessários para a construção de games dos mais variados estilos gráficos e de gameplay. Elaborando projetos práticos de programação, vamos experimentando diferentes formas de se implementar os variados componentes que fazem parte de uma aventura digital, tais como as suas regras, as interações entre os elementos de um cenário, o posicionamento e a configuração de personagens e de itens em uma fase.

Se você é leigo no assunto, mas tem vontade de aprender, pode ficar tranquilo: a partir do primeiro texto da série, abordamos desde tópicos considerados mais simples, como a instalação e a configuração da ferramenta em nossos computadores, até as etapas que envolvem colocar, de fato, a mão na massa, por exemplo, por meio da codificação de scripts controladores de eventos e da configuração de comportamentos de objetos via editor do Unity.

No momento, estamos desenvolvendo o game Consultório do Dr. Tratanildo. Trata-se de um puzzle ambientado em um cenário tridimensional, cujos aspectos de gameplay prestam homenagem a clássicos dos anos 1980 e 1990, como Pac-Man (Namco, 1980) e Dr. Mario (Nintendo, 1990).


Se você tem a vontade de tirar do papel aquele jogo que sempre sonhou em ver se tornar realidade, não perca mais tempo: junte-se a nós para trilharmos esta rota em busca de novos conhecimentos e de muita diversão!

Com pílula ou sem pílula, doutor?

Embora já tenhamos configurado o ambiente físico em que o paciente repousará durante o tratamento, ainda precisamos definir a configuração de alguns elementos em cena para que o jogador possa controlar os equipamentos atrelados ao leito hospitalar.

Em encontros anteriores, realizamos a codificação de uma área destinada à concessão de pílulas miraculosas aos pacientes, identificada por um coração vermelho giratório. Por meio do script ConcedePilula, determinamos que, assim que o médico se aproximar da área designada, uma opção será apresentada em tela, indicando a possibilidade de se entregar os medicamentos ao paciente:

Iremos, a partir de agora, evoluir os comportamentos apresentados por esse script, acrescentando a possibilidade do doutor iniciar o manejo dos equipamentos após a concessão das pílulas, já que, coincidentemente, o joystick que permite o manejo dos equipamentos encontra-se bem próximo ao coração cenográfico.

Idealmente, poderíamos substituir o Sphere Collider atrelado ao objeto cenográfico por um Box Collider que cobrisse toda a área ao redor do coração, entre a parede e o joystick, porém, como aplicamos ao objeto uma animação de rotação, algo semelhante ao observado a seguir poderia ocorrer:

Para resolvermos essa questão, necessitaremos realizar intervenções tanto em código quanto em relação aos componentes atrelados a alguns dos GameObjects de nossa cena.

Vamos iniciar nossas intervenções abrindo o projeto para edição. No Unity Hub, clique duas vezes sobre o item referente ao projeto Consultório do Dr. Tratanildo. Na interface inicial do editor, na aba Project, abra a pasta AssetsScenes e, por fim, clique duas vezes no ícone da cena ConsultorioScene.

Na aba Hierarchy, selecione o objeto AreaEntregaPilulas, subordinado a CenarioFixo. Inicialmente, iremos reposicionar o objeto para o centro da nova área de colisão que será delimitada em breve, permitindo que o coração cenográfico sirva para indicar aquela localidade como um todo.

Na aba Inspector, alteraremos o valor do parâmetro Z do atributo Position de seu componente Transform, de -18 para -16.5, conforme exemplificado pela imagem a seguir:

Ainda na aba Inspector, vamos remover o Sphere Collider atrelado a ele, clicando com o botão direito do mouse sobre o nome do componente e, no menu suspenso apresentado em tela, selecionando a opção Remove Component.

O novo colisor a ser utilizado para a detecção da presença do médico na região não ficará mais atrelado a AreaEntregaPilulas; utilizaremos JoystickLeito como referência para o posicionamento do novo componente, fazendo com que precisemos transferir Concede Pilula para o novo GameObject eleito.

Com AreaEntregaPilulas ainda em evidência, na aba Inspector clique com o botão direito sobre o título do componente Concede Pilula. No menu suspenso apresentado, selecione a opção Copy Component

A seguir, na aba Hierarchy, selecione o objeto JoystickLeito. Via aba Inspector, clique com o botão direito sobre seu componente Transform e selecione a opção Paste Component As New. Uma cópia do componente Concede Pilula surgirá ao fim da lista de componentes, já com as configurações anteriormente consideradas para AreaEntregaPilulas.

Tendo JoystickLeito ainda em evidência, insira um novo componente de tipo Box Collider ao objeto, por intermédio do botão Add Component presente na aba Inspector. Os valores a serem considerados para seus atributos estão descritos a seguir:
  • Is Trigger: mantenha a caixa de seleção marcada (true);
  • Center: X = -1.5, Y = 0, Z = -5;
  • SizeX = 3, Y = 0.5, Z = 12.
Para ver os limites do Collider sendo configurados durante a inserção dos valores, basta clicar sobre o botão Edit Collider, como indicado na ilustração a seguir:

Para evitarmos a duplicidade de controladores responsáveis pela concessão de medicamentos aos pacientes, via aba Hierarchy, volte a selecionar AreaEntregaPilulas e, por meio da aba Inspector, clique com o botão direito sobre o título de seu componente Concede Pilula, selecionando em seguida a opção Remove Component:

Exibindo a mensagem correta

Para que possamos ver em prática as alterações realizadas, seria bem interessante já permitirmos ao jogo identificar se o médico veio até o leito para conceder pílulas ou para realizar a movimentação do maquinário do leito. Iremos desenvolver melhor essa dinâmica nos próximos encontros, mas já podemos realizar uma breve intervenção em código que nos auxiliará na elaboração das lógicas envolvidas no processo.

Na aba Project, abra a pasta Assets e, em seguida, Scripts. Clique duas vezes sobre o ícone do script ConcedePilula para editarmos seu código no Visual Studio.

São duas as situações de interação possíveis para o doutor, em relação à interação com o paciente no leito: conceder pílulas miraculosas, caso tenha ao menos uma consigo em suas mãos, ou manejar o maquinário, se estiver com as mãos livres.

Considerando que já realizamos uma verificação bem parecida dentro da estrutura de OnTriggerEnter, basta acrescentarmos essa regra à lógica, por meio de uma substituição de códigos.

Troque o seguinte conteúdo, presente dentro das chaves de OnTriggerEnter:

            //   Se tiver pílulas nas mãos
            //   - Opção a ser exibida: Conceder pílula
            //   Se não tiver:
            //   -  Não exibir barra de opções

            if (temPilulaMaoDir || temPilulaMaoEsq)
            {
                barraInferior.TextoTeclaOpcao.text = "X";
                barraInferior.pilulaAConceder_1 = nomePilulaDir;
                barraInferior.pilulaAConceder_2 = nomePilulaEsq;
                barraInferior.TextoBarraInferior.text = "Conceder pílula(s)";
                barraInferior.gameObject.SetActive(true);
            }
            else barraInferior.gameObject.SetActive(false);

Pelo bloco de código descrito a seguir:

        //   Se tiver pílulas nas mãos
        //   - Opção a ser exibida: Conceder pílula(s)
        //   Se não tiver:
        //   - Opção a ser exibida: Manusear equipamento

        if (temPilulaMaoDir || temPilulaMaoEsq)
        {
            barraInferior.pilulaAConceder_1 = nomePilulaDir;
            barraInferior.pilulaAConceder_2 = nomePilulaEsq;
            barraInferior.TextoBarraInferior.text = "Conceder pílula(s)";
        }
        else barraInferior.TextoBarraInferior.text = "Manusear equipamento";

        barraInferior.TextoTeclaOpcao.text = "X";
        barraInferior.gameObject.SetActive(true);

Com a alteração recém-implementada, ao adentrar a área delimitada pelo Box Collider, o jogo exibirá a barra de informações com o texto adequado a cada caso observado (com ou sem pílulas nas mãos do doutor).

Salve o script e feche o Visual Studio. Retorne ao editor do Unity para experimentarmos a execução do jogo, indo à aba Game e clicando sobre o ícone do botão Play:

Note que, dependendo do que Tratanildo carrega (ou não) em suas mãos, a mensagem exibida em tela se adequa à situação.

Interrompa a simulação da execução, clicando novamente sobre o ícone do botão Play e retornando à aba Scene. Não se esqueça de salvar a cena (menu File, opção Save) e o projeto (menu File, opção Save Project) antes de fechar o Unity.

Próximos passos

Para termos o módulo de controle do labirinto funcionando adequadamente e de forma integrada ao contexto geral do jogo, ainda precisamos codificar determinadas regras por meio de edição de scripts. Por exemplo, embora a barra inferior mostre em tela as opções de tratamento adequadas, ainda não programamos o que de fato ocorrerá quando o jogador indicar ao game que Tratanildo irá controlar o maquinário da cama hospitalar.

Em nossos próximos encontros, continuaremos a implementar os scripts e os ajustes necessários para tirarmos do papel as funcionalidades restantes de nosso game.

Excepcionalmente, nosso próximo encontro será no dia 7 de dezembro. Até mais! Fique sempre ligado nas novidades do GameBlast!

Revisão: Ives Boitano
Siga o Blast nas Redes Sociais
Rodrigo Garcia Pontes
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 4.0).