Aprendendo a programar jogos em Unity: movimentando o labirinto com controles de videogame

Prosseguiremos desenvolvendo as configurações necessárias para o uso de controles em nosso jogo.

em 26/07/2026
Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Dando sequência ao processo iniciado em nosso encontro anterior, continuaremos a implementar o suporte a controles de videogame em nosso projeto, realizando modificações em scripts controladores do labirinto e da barra inferior do Canvas.

Se esta é a primeira vez que você acessa conteúdos de nossa série, considere-se especialmente convidado a conhecer as diferentes possibilidades abertas pelo uso de ferramentas de desenvolvimento, como a Unity, para tirar do papel os jogos que sempre sonhou em tornar realidade.

A cada encontro, construímos juntos projetos de programação de games que nos permitem experimentar diferentes métodos, técnicas e ferramentas utilizados globalmente pelos estúdios de desenvolvimento de jogos, no processo de criação de games dos mais variados estilos gráficos e de gameplay.

A partir do primeiro tópico da série, você terá a oportunidade de acompanhar desde as etapas mais elementares do processo de desenvolvimento de um jogo, como a instalação e a configuração da ferramenta Unity em nossos computadores, até os passos que envolvem a confecção dos elementos que compõem um jogo: fases, desafios, regras e objetos; inserindo e configurando imagens, sons e modelos 3D, e codificando scripts controladores de comportamentos de interação entre os elementos.

Até o momento, já concluímos a construção de dois jogos 2D: Motorista da Pesada e Forest Ping Pong. No momento, estamos trabalhando na confecção do puzzle tridimensional Consultório do Dr. Tratanildo. Vale muito a pena conferir os processos que nos levaram a finalizar os dois primeiros jogos, e os passos que já concluímos no processo de desenvolvimento do terceiro game, por meio do índice disponibilizado no primeiro texto da série.


Caso você tenha gostado da ideia de aprender a criar suas próprias aventuras digitais, “aperte os cintos” e junte-se a nós, para acelerarmos juntos nessa estrada repleta de novos conhecimentos e de muita diversão!

Movimentando o labirinto

Após as configurações iniciais para permitir que o jogo reconheça os direcionais digitais do controle, concluímos a implementação da movimentação básica do personagem pelo cenário, tanto utilizando os já referidos direcionais, quanto por meio de interações com o analógico esquerdo do controle do Xbox One. 

Realizaremos, agora, intervenções semelhantes às que concluímos no encontro anterior, dessa vez voltadas aos scripts controladores do manejo do labirinto e, também, das opções exibidas na barra inferior do Canvas, que permitirão, dentre outras ações, utilizarmos o controle para pegarmos pílulas e para iniciarmos o manejo da máquina que controla a inclinação do leito do consultório.

Para tal, vamos abrir nosso 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 Unity, na aba Project, abra a pasta Assets e, em seguida, Scenes. Clique duas vezes sobre o ícone da cena ConsultorioScene.

Na aba Project, abra a pasta Assets e, em seguida, Scripts. O primeiro script a sofrer intervenções hoje será o responsável pelo controle da inclinação do labirinto; clique duas vezes sobre o ícone do script ControllerMov_Labirinto para iniciarmos sua edição no Visual Studio.

Dentro da estrutura de códigos da função void Update, mais especificamente no conteúdo da estrutura condicional switch (Geral.ModoDeControle), modifique as linhas que se referem aos modos de controle SoTeclado e Controle para o conteúdo descrito a seguir:

                case "SoTeclado":
                    // Para "frente" e para "trás"
                    if (Input.GetAxis("Vertical") > 0.5)
                        alteracoesInclinacao.z -= taxaInclinacao * Time.deltaTime;
                    if (Input.GetAxis("Vertical") < -0.5)
                        alteracoesInclinacao.z += taxaInclinacao * Time.deltaTime;
                    // Para os lados
                    if (Input.GetAxis("Horizontal") < -0.5)
                        alteracoesInclinacao.x += taxaInclinacao * Time.deltaTime;
                    if (Input.GetAxis("Horizontal") > 0.5)
                        alteracoesInclinacao.x -= taxaInclinacao * Time.deltaTime;
                    break;
                case "Controle":
                    alteracoesInclinacao.x -= (Time.deltaTime * Input.GetAxis("Horizontal") * 60);
                    alteracoesInclinacao.x -= (Time.deltaTime * Input.GetAxis("DPAD_h") * 45);
                    alteracoesInclinacao.z -= (Time.deltaTime * Input.GetAxis("Vertical") * 60);
                    alteracoesInclinacao.z -= (Time.deltaTime * Input.GetAxis("DPAD_v") * 45);
                    break;

Por meio desta troca de linhas de código, realizamos duas ações básicas:
  • Para os casos em que o jogador deseja utilizar unicamente o teclado como forma de interação com o jogo, o comportamento esperado mantém-se o mesmo, com as inclinações ocorrendo por meio de interações observadas nos eixos Horizontal (teclas A e D, setas para direita e para esquerda do teclado) e Vertical (teclas W e S, setas para cima e para baixo do teclado);
  • Escolhendo interagir por meio do controle de videogame, as inclinações ocorrerão de forma semelhante ao observado no modo Teclado+Mouse, utilizando os direcionais e o analógico esquerdo do controle para aplicar a inclinação desejada ao labirinto.
Os valores 60 e 45, presentes nas linhas de concessão de valores para os eixos X e Z de alteracoesInclinacao, são multiplicadores de intensidade sugeridos, que podem ser alterados, caso queira, a partir da sua percepção, durante os testes de manejo do labirinto que vier a realizar.

Salve o script, minimize o Visual Studio e retorne ao editor do Unity para darmos sequência aos ajustes necessários para manejo do jogo por meio de controles de videogame.

Ajustes para a barra inferior

No cenário de Consultório do Dr. Tratanildo, ao aproximarmos o personagem principal de determinados objetos de interesse (como as pílulas e o leito), opções de interação são apresentadas na barra inferior do Canvas. Até o momento, o jogador pode confirmar a opção apresentada na tela pressionando a tecla X do teclado, conforme indicado por elemento específico na interface:

Realizaremos ajustes em scripts para que seja possível utilizar um botão de ação do controle de videogame no lugar desta tecla específica do teclado.

Inicialmente, vamos editar o script ControllerBarraInferior, para que ele possa identificar o pressionamento da tecla adequada do controle de videogame e conclua a interação pretendida no momento. Para tal, clique duas vezes sobre seu ícone na pasta Scripts, exibida atualmente pela aba Project do editor do Unity.

A intervenção a ser realizada no script envolverá a troca de apenas uma linha de código, presente dentro da estrutura de void Update.

Substitua o comando:

        if (Input.GetKeyDown(KeyCode.X))

Por:

        if ((Geral.ModoDeControle.Contains("Teclado") && Input.GetKeyDown(KeyCode.X)) || (Geral.ModoDeControle == "Controle" && Input.GetButtonDown("Fire1")))

Embora condensado em um comando único, o novo trecho introduzido realiza uma separação clara: caso o jogo esteja, no momento, em modo de controle envolvendo o uso de teclado (seja Teclado+Mouse, seja SoTeclado), o game verificará o pressionamento da tecla X; se o jogo estiver sendo jogado por meio do uso de controle de videogame, será observado o pressionamento do botão denominado Fire1.

O nome “Fire1” corresponde a uma das entradas do Input Manager do Unity convenientemente pré-configuradas pelo fabricante da ferramenta em duplicidade. No caso, para controles de videogame, ele mapeia a entrada joystick button 0, que, normalmente, corresponde ao principal botão de ação do controle. Em nosso caso concreto, trata-se do botão A do joystick do Xbox.


A princípio, com esta alteração, já conseguimos interagir com os elementos do cenário utilizando o controle de videogame, porém, considerando que o botão principal do controle é representado pela letra A (e não X, como o direcionado ao controle), teremos de realizar mais algumas intervenções para que a informação correta seja exibida na barra inferior do Canvas.

Salve o script, minimize o Visual Studio e retorne ao editor do Unity. Novamente na barra Project, com a pasta Scripts em evidência, clique duas vezes sobre o ícone do script PegaPilula para editarmos seu conteúdo.

Dentro das chaves da função OnTriggerStay, localize o trecho de código ao final do bloco, com comandos a serem realizados quando a barra inferior do Canvas será exibida (logo após o comando if (ativarBarraInferior)).

Troque a seguinte linha de código:

                barraInferior.TextoTeclaOpcao.text = "X";

Pelo blocos de comandos a seguir:

                if (Geral.ModoDeControle.Contains("Teclado"))
                    barraInferior.TextoTeclaOpcao.text = "X";
                else if (Geral.ModoDeControle == "Controle")
                    barraInferior.TextoTeclaOpcao.text = "A";

Assim que o personagem se aproximar das pílulas cenográficas do consultório, dependendo do modo de controle utilizado, a barra inferior indicará visualmente ao jogador que ele deverá pressionar X para realizar a ação indicada, se estiver utilizando teclado, ou o botão A, se estiver utilizando joystick no momento.

Salve o script, minimize o Visual Studio e retorne ao editor do Unity. Abriremos para edição, agora,  o script ConcedePilula, clicando por duas vezes sobre seu ícone, conforme ilustrado a seguir.

A intervenção a ser realizada é praticamente idêntica à realizada para o script PegaPilula: dentro da estrutura de OnTriggerEnter, ao final do código presente entre suas chaves, troque a seguinte linha de código:

            barraInferior.TextoTeclaOpcao.text = "X";

Pelo blocos de comandos a seguir:

            if (Geral.ModoDeControle.Contains("Teclado"))
                barraInferior.TextoTeclaOpcao.text = "X";
            else if (Geral.ModoDeControle == "Controle")
                barraInferior.TextoTeclaOpcao.text = "A";

Utilizando o mesmo código para os dois scripts, dessa vez, configuramos a exibição adequada da opção de tecla ou botão a ser pressionado ao aproximarmos o médico do leito, permitindo a adequada concessão de pílulas ou o início do manejo do equipamento também para quem prefere jogar utilizando controles de videogame.

Salve o script e feche o Visual Studio. De volta ao editor do Unity, caso deseje, conecte seu controle ao computador e experimente a execução do game, indo à aba Scene e clicando sobre o ícone do botão Play.

Note que as opções são exibidas de forma adequada, na barra inferior do Canvas. Aproveite também e experimente testar o manejo do labirinto com os direcionais digitais e analógicos do controle.

Interrompa a simulação de 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, Save) e o projeto (menu File, Save Project) antes de fechar o Unity.

Próximos passos

Avançamos na implementação do suporte ao controle de videogames para nosso projeto, codificando formas de controlar a inclinação do labirinto e de selecionar opções apresentadas na interface do jogo por meio dos recursos do joystick do Xbox One.

Para que a utilização do jogo com o controle de videogame como meio de interação seja plena, precisaremos realizar ajustes relacionados às opções dos menus e às telas de diálogo entre paciente e médico, pois ainda dependem do uso do mouse para que o jogador clique em botões e em outros elementos visuais para avançar no game.

Essas etapas, embora pareçam ser opcionais, são essenciais para entendermos os desafios que os desenvolvedores enfrentam ao elaborar jogos para consoles, ambientes em que nem sempre os jogadores disporão de mouses ou teclados para interagir com os games.

Nos próximos encontros, continuaremos realizando as intervenções necessárias para que todas as interações do game possam ser realizadas com joysticks.

Nos encontraremos novamente no próximo dia 2 de agosto. Até mais! Fique ligado sempre 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).