Aprendendo a programar jogos em Unity: primeiros passos para a implementação de suporte a controles de videogame

Iniciaremos os preparativos para que seja possível interagir com o game utilizando controles de consoles.

em 19/07/2026
Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Após concluirmos, em nosso encontro anterior, a codificação dos comportamentos esperados para o menu de opções de nosso jogo, iniciaremos hoje as configurações necessárias em nosso projeto para que o jogador possa controlar o game utilizando controles de videogame, se assim desejar.

Se hoje for a primeira vez que você lê conteúdos de nossa série, sinta-se especialmente convidado a acompanhar-nos em uma interessante jornada sobre o universo do desenvolvimento de jogos digitais.

Por meio do uso da ferramenta Unity, estamos aprendendo a cada encontro diferentes métodos, técnicas e ferramentas para a criação de jogos dos mais variados estilos gráficos e de gameplay.

Desde o primeiro tópico da série, estamos abordando, por meio da realização de atividades práticas, as diferentes etapas do processo de desenvolvimento de games, que englobam desde as configurações iniciais do ambiente de programação em nossos computadores, até as etapas que envolvem a elaboração e a configuração de cenários, de personagens e de itens em fases de um game, além das regras que fazem parte do desafio lúdico proposto aos gamers. 

Esses processos envolvem, dentre outros, a programação de scripts controladores de comportamentos dos elementos em cena, além da inserção e da configuração de elementos multimídia, tais como imagens, sons e modelos tridimensionais.

Para facilitar o aprendizado dos conceitos apresentados, desenvolvemos na prática alguns jogos 2D e 3D, visando permitir que os leitores possam aplicar os conceitos abordados em seus projetos pessoais. Até o momento, já finalizamos a construção de dois jogos bidimensionais, Motorista da Pesada e Forest Ping Pong; e estamos trabalhando na construção do puzzle tridimensional Consultório do Dr. Tratanildo.

Todo o processo de desenvolvimento dos três games pode ser conferido a partir dos textos disponibilizados no índice, disponível no primeiro texto da série. Mesmo se você não tiver experiências prévias em programação de jogos ou de sistemas em geral, convidamo-lo a experimentar implementar os jogos propostos, pois elaboramos a série utilizando exemplos e explicações dos conceitos abordados, visando permitir a quem tiver interesse aprender sobre como tirar do papel os jogos que sempre sonhou em tornar realidade.

Se você gostou da ideia, não perca mais tempo e junte-se a nós em uma divertida caminhada, repleta de novos conhecimentos e de muita diversão!

Configurando a entrada de dados para controles de videogame

Em diferentes momentos de nosso projeto, lançamos mão de códigos em scripts e de configurações no Input Manager do Unity para a obtenção de dados sobre a utilização de teclado e mouse pelo jogador para a realização de ações dentro do universo de nosso game.

Além dos métodos tradicionais de controle presentes nos computadores, é interessante sabermos como a ferramenta permite que outros tipos de interação entre o jogador e nosso game possam ocorrer. Uma das mais naturais, sobretudo para gamers de consoles, é por meio do uso de controles de videogame, também conhecidos como joysticks.

O Unity permite que configuremos determinadas entradas de dados, por intermédio de seu Input Manager, específicas para a obtenção de informações sobre os botões pressionados pelo jogador em um controle de videogame, além de dados sobre a posição atual dos analógicos, gatilhos, dentre outros elementos de interação.

Embora existam diferentes tipos de controles, alguns elementos são comuns à maioria dos joysticks atuais, tais como a presença de direcionais digitais e de alavancas analógicas, de botões de face (A, B, X e Y, para Xbox e Switch; △, ◻, 〇 e 🞪, para a família PlayStation) e de botões para pausar e retomar o jogo.

Para a configuração atual de nosso game, utilizaremos como referência o leiaute do controle do Xbox One / Xbox Series, que contempla todos os itens elencados anteriormente.

Vamos iniciar as configurações necessárias para fazê-lo funcionar adequadamente em nosso game, 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 Unity, na aba Project, abra a pasta Assets e, em seguida, Scenes. Clique duas vezes sobre o ícone da cena ConsultorioScene.

Clique sobre o menu Edit e, em sequência, na opção Project Settings. Na nova janela exibida, abra o conteúdo correspondente à opção Input Manager, presente na coluna à esquerda. A lista de entradas de valor configuradas para o Input Manager do Unity será exibida, conforme exemplo a seguir.

Por comodidade, o Unity já tem alguns valores pré-configurados para entradas semelhantes, realizadas por dispositivos diferentes. Vamos entender melhor esse conceito, expandindo as entradas de nome Horizontal, conforme exemplificado pela imagem a seguir.


A presença de dois elementos com o mesmo nome em Input Manager permite que, por exemplo, por meio da leitura de valores de Input.GetAxis("Horizontal"), tanto o pressionamento das teclas A, D, seta para esquerda ou seta para direita do teclado (destacado em laranja) quanto a movimentação do eixo X do analógico de um controle (destacado em verde) sejam detectáveis por códigos em um script controlador.

O mesmo é válido para outras entradas do Input Manager. Experimente observar, agora, as entradas nomeadas como Vertical e note que o padrão é semelhante: diferentes inputs para o mesmo nome de variável.


De certa forma, esta abordagem permite que um jogo suporte múltiplos esquemas de controle de forma simultânea, sem a necessidade de codificações específicas em script para cada tipo de controle. Porém, como a quantidade de elementos em um controle pode ser bem significativa, o Unity nos permite também adicionar entradas customizadas em seu Input Manager, para que possamos mapear determinados botões ou eixos específicos dos controles e identificar as interações dos jogadores com os elementos.

Para mapearmos os botões do controle do Xbox One, é importante sabermos quais são os elementos identificados pelo Unity e seus respectivos parâmetros de configuração. O diagrama a seguir contempla os principais itens do controle e os parâmetros a serem utilizados no Unity, em ambiente de desenvolvimento Windows.

Ao compararmos alguns dos valores observados anteriormente no Input Manager com a coluna Mapping in Unity da tabela fornecida, podemos perceber que já temos à disposição alguns dos elementos do controle mapeados por padrão. É o caso, por exemplo, do analógico esquerdo do controle, mapeáveis por meio do acesso aos valores X Axis e Y Axis do controle, o que já ocorre por meio das entradas Horizontal e Vertical do Input Manager.

Outros elementos, como os direcionais digitais, precisam ser incluídos na listagem de mapeamento de inputs do Unity, caso queiramos permitir a interação por meio do seu uso.

Vamos introduzir, então, o suporte aos direcionais digitais do controle do Xbox One, por meio da adição de elementos à listagem do Input Manager. Com sua janela ainda em evidência, modifique o valor do campo Size para duas unidades a mais do que o valor atualmente em exibição (no caso, de 18 para 20).

Note que o último item da listagem foi duplicado duas vezes, conforme destaque em laranja da imagem anterior. Expanda o primeiro item duplicado e realize as seguintes modificações em valores de seus campos:
  • Name: Renomeie a entrada para “DPAD_h”;
  • Deixe em branco os valores destinados aos todos os atributos na lista entre Descriptive Name e Alt Positive Button.
  • Type: Escolha a opção Joystick Axis;
  • Axis: Selecione a opção 6th axis (Joysticks)
  • Joy Num: Escolha a opção Get Motion from all Joysticks.
Já para o segundo item duplicado, as ações a serem tomadas deverão ser as descritas a seguir:
  • Name: Renomeie a entrada para “DPAD_v”;
  • Deixe em branco os valores destinados aos todos os atributos na lista entre Descriptive Name e Alt Positive Button.
  • Type: Escolha a opção Joystick Axis;
  • Axis: Selecione a opção 7th axis (Joysticks)
  • Joy Num: Escolha a opção Get Motion from all Joysticks.
Por meio da inclusão dos dois novos itens na relação de inputs de Input Manager, podemos perceber que o Unity permite, por meio da opção Joy Num, a codificação para a detecção de entradas por mais de um controle simultaneamente, o que permite criarmos jogos multiplayer locais com facilidade. Porém, como nosso jogo atual é single player, manteremos a opção indicada durante as intervenções, para que, independentemente do controle conectado ao computador ou console no momento, o jogo responda a seus comandos da mesma forma.

Também é interessante notar que estamos fornecendo valores de Axis correspondentes aos indicados na coluna Mapping in Unity do diagrama fornecido. Para outros tipos de controles, é interessante procurar seus valores de referência, pois podem ser diferentes dos indicados para o controle do Xbox One / Xbox Series.

Feche a janela de Project Settings e retorne a interface principal do editor do Unity, para realizarmos as primeiras intervenções em código voltadas ao uso de controles de videogame em nosso projeto.

Movimentações do personagem

Na aba Project, abra a pasta Assets e, em seguida, Scripts. Clique duas vezes sobre o ícone do script ControllerMov_Tank para iniciarmos sua edição.

Dentro da estrutura de códigos da função void Update(), na área referente ao controle do avanço do personagem principal para a frente, altere o conteúdo referente ao bloco condicional if...else pela estrutura a seguir:

        switch (Geral.ModoDeControle)
        {
            case "SoTeclado":
            case "Teclado+Mouse":
                if (Input.GetAxis("Vertical") > 0.5)
                    velocidadeCaminhada = Mathf.Min(velocidadeCaminhada + (Time.deltaTime * 2), 2.0f);
                else velocidadeCaminhada = 0.0f;
                break;
            case "Controle":
                if (Input.GetAxis("DPAD_v") > 0.5)
                    velocidadeCaminhada = Mathf.Min(velocidadeCaminhada + (Time.deltaTime * 2), 2.0f);
                else if (Input.GetAxis("Vertical") > 0.1)
                    velocidadeCaminhada = Mathf.Max(0, Input.GetAxis("Vertical") * 2.0f);
                else velocidadeCaminhada = 0.0f;
                break;
        }

O bloco adicionado modifica a forma do jogo perceber como deve realizar a movimentação para a frente do personagem da seguinte forma:
  • Caso o jogador tenha escolhido os modos de controle que contem com o uso do teclado (SoTeclado ou Teclado+Mouse), o comportamento se mantém como o anteriormente configurado, aumentando gradualmente o valor de velocidadeCaminhada enquanto o jogador pressionar a tecla W ou seta para cima, por intermédio da leitura dos valores de Input.GetAxis("Vertical");
  • Se o jogador tiver configurado o game para ser controlador por meio de um controle de videogame, duas alternativas se abrem:
    • Caso o jogador esteja utilizando os direcionais digitais para se locomover, o comportamento observado será semelhante ao aplicado aos modos de uso com teclado: um gradual aumento do valor de velocidadeCaminhada, a partir da leitura  dos valores de Input.GetAxis("DPAD_v");
    • Caso a movimentação seja realizada por meio da alavanca analógica esquerda do controle, não haverá aumento gradual do do valor de velocidadeCaminhada, mas sim a aplicação direta do valor lido por Input.GetAxis("Vertical") multiplicado por 2.
Essa abordagem diferenciada permite ao jogador controlar melhor o passo do personagem no cenário com o uso da alavanca analógica, graduando a velocidade da forma que assim preferir.

Em seguida, modifique o conteúdo interno das chaves do bloco condicional switch referente ao controle da movimentação lateral (tank) pelo que se segue:

            case "SoTeclado":
                if (Input.GetAxis("Horizontal") > 0.5)
                    rotacaoPersonagem.y += (Time.deltaTime * 120);
                else if (Input.GetAxis("Horizontal") < -0.5)
                    rotacaoPersonagem.y -= (Time.deltaTime * 120);
                break;
            case "Controle":
                rotacaoPersonagem.y += (Time.deltaTime * Input.GetAxis("Horizontal") * 180);
                rotacaoPersonagem.y += (Time.deltaTime * Input.GetAxis("DPAD_h") * 120);
                break;
            case "Teclado+Mouse":
                rotacaoPersonagem.y += (Time.deltaTime * Input.GetAxis("Mouse X") * 600);
                break;

O comportamento observado para os modos de controle SoTeclado e Teclado+Mouse não mudam, apenas o correspondente ao modo Controle, que passa a ser desmembrado dos comportamentos esperados para o modo 
SoTeclado, admitindo a interação do jogador pelos valores observados tanto pelo eixo horizontal do analógico esquerdo (Input.GetAxis("Horizontal")) quanto pelo dos direcionais digitais (Input.GetAxis("DPAD_h")).

A mesma lógica adotada durante nosso encontro de hoje pode ser utilizada caso você queira ativar o analógico direito do controle para controlar a câmera. Basta, para isso, adicionar e configurar os eixos correspondentes no Input Manager com nomes próprios definidos (por exemplo, “RS_h” e “RS_v”), codificando, em seguida, a leitura desses valores no bloco de leituras do controle de movimentação lateral do script.

Salve o script e feche o Visual Studio. Retorne ao editor do Unity e, caso tenha um controle do Xbox (ou semelhante) à disposição, conecte-o ou pareie-o a seu computador e, em seguida, teste a execução do jogo, indo à aba Game e clicando sobre o ícone do botão Play.

Como codificamos apenas as interações do controle de videogame com a movimentação do personagem principal, ainda não conseguiremos realizar determinadas ações com o controle, como avançar as telas de diálogo ou controlar os medicamentos no labirinto. Porém, ao testarmos o jogo, já podemos ter um pequeno vislumbre de como será a interação do jogador com o game por meio do uso de um joystick, o que pode mudar completamente a experiência de uso do game.

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

É muito interessante constatar que temos um projeto em mãos maduro o suficiente para poder receber o suporte ao uso de controles de videogame, em adição às demais formas de interação entre o jogador e o game.

Embora precisemos continuar a implementar esta funcionalidade nos próximos encontros, já o parabenizo por ter chegado até este ponto, pois, de certa forma, é uma conquista que nos aproxima, por exemplo, de estarmos aptos a começar a pensar em desenvolver jogos para consoles, visto que, o maior diferencial entre um jogo para computadores e um game para consoles são os meios de interação utilizados (teclado e mouse, versus joystick).

Nos próximos encontros, daremos sequência à implementação do suporte ao uso de controles de videogame em nosso jogo, codificando formas de utilizá-los para o manejo dos medicamentos no labirinto do game.

Nos encontraremos novamente no próximo dia 26 de julho. Até mais! Fique ligado sempre nas novidades do GameBlast!

Revisão: Ives Boitano
Fonte do diagrama do controle Xbox: fórum da Unity
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).