Aprendendo a programar jogos em Unity: ajustes para utilização do Input Manager em nosso game

Iremos configurar o projeto para permitir o controle do personagem principal e do labirinto de forma flexibilizada.

em 19/04/2026
Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity! Após construirmos, em nosso encontro anterior, a versão inicial do menu de entrada de nosso jogo, vamos voltar a realizar nossas “sessões de ajuste” no projeto, codificando estruturas para permitir a flexibilização dos métodos de entrada de comandos para movimentação dos personagens.

Caso essa seja a primeira vez que você tem contato com conteúdos de nossa série, aproveite esta oportunidade para juntar-se a nós em um divertido processo de aprendizado sobre conceitos e métodos aplicáveis ao desenvolvimento de jogos digitais. Juntos, iremos construir diferentes projetos práticos de programação de games e, assim, aprenderemos diferentes técnicas e ferramentas que nos auxiliarão a tirar do papel jogos de variados estilos gráficos e de gameplay.

A partir do primeiro texto da série, abordaremos desde a instalação e a configuração da ferramenta Unity em nossos computadores até os passos necessários para, de fato, tirar um projeto do papel. Conceitos envolvendo a codificação de comportamentos dos elementos nos cenários dos jogos, a construção das fases, de seus personagens e adversários, além do posicionamento e da configuração de elementos multimídia no game como um todo são apresentados a cada encontro realizado.

No momento, estamos desenvolvendo o terceiro jogo da série: trata-se de Consultório do Dr. Tratanildo, um puzzle ambientado em um consultório médico tridimensional, cujas características específicas de construção e de gameplay nos permitiram experimentar, até o momento, aspectos relacionados ao posicionamento de câmeras em um cenário 3D, à interação física entre elementos tridimensionais das fases, à interligação entre diferentes “momentos” em uma sequência de ações programada, dentre diversos outros.

Além do jogo atual, produzimos anteriormente outros dois jogos, Forest Ping Pong e Motorista da Pesada. Vale muito a pena conferir o processo de elaboração dos três games por meio do índice disponibilizado no primeiro texto da série.


Não se assuste se considerar os termos apresentados no texto de difícil compreensão. Seguindo desde o início do processo, você perceberá que sempre abordamos os conceitos por meio de exemplos replicáveis, que podem ser aplicados posteriormente nos projetos que vier a desenvolver por conta própria, de uma forma especialmente destinada à quem não teve oportunidades prévias de aprender sobre codificação de jogos ou mesmo de outros tipos de sistemas.

Se você gostou da ideia de tirar do papel aquele game que sempre sonhou em tornar realidade, não se acanhe e venha conosco em uma interessante caminhada, repleta de aprendizados, novos conhecimentos e de muita diversão!

Flexibilizando a entrada de comandos

Desde o momento em que construímos o consultório de Tratanildo e codificamos formas de se controlar a movimentação do médico e a rotação do labirinto que representa o interior dos corpos dos pacientes, utilizamos dentro dos scripts controladores referências diretas a determinadas teclas, como as que representam setas no teclado do jogador.

Embora funcional, esta não é uma abordagem ótima para projetos que permitam múltiplas formas de interação entre os gamers e seus jogos. Um exemplo notável é a grande parcela de jogadores de PCs e computadores que preferem realizar a movimentação dos personagens por meio das teclas W, A, S e D.

O Unity nos fornece opções para que possamos permitir diferentes alternativas de entrada de dados (também conhecidas como inputs) sem termos que detalhar, script a script, todas as alternativas possíveis e prováveis para cada ação programada. 

Em nosso encontro de hoje, por meio da edição de propriedades do pacote Input Manager do Unity, permitiremos que tanto a “tribo do WASDismo” quanto a “galera das setinhas” possam aproveitar o game sem sobressaltos. As intervenções que realizaremos hoje, posteriormente, poderão nos permitir codificar inclusive o suporte à controles de videogames para nossos projetos.

O pacote Input Manager, responsável pela gestão da detecção da entrada de inputs pelos games, existe desde as primeiras versões do Unity. Embora, para novos projetos, seja recomendável utilizarmos o novo pacote Input System, vamos aprender os conceitos básicos de controle de inputs por meio da versão anterior.

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

Inicialmente, vamos conferir se nosso projeto está configurado para aceitar comandos controlados pelo Input Manager. Clique no menu Edit e selecione a opção Project Settings, conforme indicado pela ilustração a seguir.


Na barra de opções apresentadas à esquerda da janela que será exibida, clique na opção Player; em seguida, selecione a opção Other Settings.

Dentro do conjunto de parâmetros Configuration, na lista de opções referentes a Active Input Handling, certifique-se de que a opção selecionada seja Input Manager (Old) ou Both. Caso a opção apresentada não seja uma das duas, realize a alteração para uma das alternativas. A diferença fundamental entre elas é que, ao selecionar Both, você poderá utilizar comandos dos dois pacotes controladores de inputs do Unity.

Feita essa verificação inicial, vamos à edição de fato dos parâmetros relacionados ao Input Manager. Ainda na janela Project Settings, na barra de opções apresentadas à esquerda, selecione a opção Input Manager. Clicando sobre a seta ao lado de Axes, você terá acesso a uma lista de comandos de entrada previamente configurados pelo Unity, prontos a serem utilizados por diferentes projetos.

Clique sobre a seta ao lado do primeiro item apresentado na lista de Axes, de nome Horizontal. O conjunto de configurações presentes dentro do item representa opções comumente utilizadas para a movimentação horizontal de personagens e objetos em um jogo. Note na imagem a seguir, por exemplo, referências às setas horizontais do teclado (left e right) e às teclas A e D nos campos Negative Button, Positive Button, Alt Negative Button e Alt Positive Button, respectivamente.

O uso dos termos Negative Button Positive Button para categorizar teclas ou botões de um controle de jogo dentro das configurações dos elementos de Input Manager deve-se à forma a qual o pacote trabalha com as entradas de dados nos jogos. Os scripts controladores lerão como um valor positivo (1) o pressionamento de uma tecla Positive Button ou como um valor negativo (-1) o pressionamento de uma tecla Negative Button.

Para controladores analógicos, como as presentes em controles como os do Xbox e do PlayStation, o valor a ser lido estará entre -1 e 1, dependendo do quão próximo a uma das bordas a alavanca estiver. Se movimentada mais à esquerda, mais próximo de -1 será o valor lido, sendo o inverso ao se movimentar as alavancas para a direita.

É essa a abordagem que permite, por exemplo, uma movimentação mais suavizada de um personagem em um mundo aberto tridimensional, caso esteja sendo controlado pelas alavancas analógicas de um controle.

Clique novamente na seta ao lado de Horizontal e, em seguida, clique sobre a presente ao lado da opção Vertical. Note que a maioria dos parâmetros é igual às apresentadas para Horizontal, mudando apenas quais são os botões “positivos” e “negativos”.

Por fim, clique novamente sobre a seta ao lado de Vertical para recolhermos suas opções e, em seguida, observarmos a relação completa de elementos presentes na listagem. Em especial, note que existem elementos que compartilham o mesmo nome, conforme destacado pela imagem a seguir.


A possibilidade de alterarmos ou adicionarmos diferentes configurações para obtenção dos inputs é o que permitirá posteriormente configurarmos o jogo para utilizar como entrada de dados diferentes setups, como teclados, controles de videogame e mouses.

Intervenções em códigos

Feche a janela Project Settings e volte à interface principal do Unity. Vamos realizar alterações nos códigos controladores da movimentação do médico no cenário (ControllerMov_Tank) e nos que regem as inclinações do labirinto (ControllerMov_Labirinto) para utilizarmos os comandos providos pelo Input Manager

O primeiro a receber intervenções será o script ControllerMov_Tank. Abra-o para edição no Visual Studio por meio da aba Project, abrindo as pastas Assets e Scripts e clicando duas vezes sobre seu ícone.

Dentre dos comandos presentes dentro dos colchetes da função Update(), altere a seguinte linha de código, presente no grupo que controla o avanço para frente:

De:
        if (Input.GetKey(KeyCode.UpArrow))

Para:
        if (Input.GetAxis("Vertical") > 0.5)

Altere também os seguintes comandos, presentes no grupo que controla a movimentação lateral:

De:
        if (Input.GetKey(KeyCode.RightArrow))

Para:
        if (Input.GetAxis("Horizontal") > 0.5)

De:
        else if (Input.GetKey(KeyCode.LeftArrow))

Para:
        else if (Input.GetAxis("Horizontal") < -0.5)

É possível perceber que, agora, estamos referenciando inputs nomeados para o controle das movimentações, e não mais as teclas ou comandos específicos para cada ação.

Salve o script, retorne ao editor do Unity e, ainda com a pasta Scripts em evidência na aba Project, abra ControllerMov_Labirinto para edição.

Dentro das estruturas de sua função Update(), altere as seguintes linhas de comando que controlam as inclinações do labirinto para frente e para trás:

De:
            if (Input.GetKey(KeyCode.UpArrow))

Para:
            if (Input.GetAxis("Vertical") > 0.5)

De:
            if (Input.GetKey(KeyCode.DownArrow))

Para:
            if (Input.GetAxis("Vertical") < -0.5)

Por fim, realize as seguintes alterações, dessa vez voltadas a comandos que controlam as movimentações do labirinto para os lados:

De:
            if (Input.GetKey(KeyCode.LeftArrow))

Para:
            if (Input.GetAxis("Horizontal") < -0.5)

De:
            if (Input.GetKey(KeyCode.RightArrow))

Para:
            if (Input.GetAxis("Horizontal") > 0.5)

Salve o script e feche o Visual Studio. Vamos retornar ao editor do Unity para experimentarmos a execução do jogo, indo à aba Game e clicando sobre o ícone do botão Play. Experimente realizar movimentações pelo cenário e no labirinto utilizando as teclas W, A, S e D, além das setas do teclado.

Um estranho atraso

Embora a movimentação possa ocorrer, agora, por meio de duas formas diferentes de interação, ao jogarmos é possível notar que há uma pequena “demora” entre o pressionamento de uma tecla e a realização da ação pelo personagem.

Por mais que possa parecer ser um defeito ou algo do gênero, trata-se de um comportamento padrão para a interação entre o teclado e o jogo, por intermédio do pacote Input Manager. Visando suavizar a transição entre um estado em que não há um botão pressionado (valor 0) e outro estado em que se pressione um botão positivo (valor 1) ou negativo (valor -1), o Unity também “suaviza” o valor informado aos scripts durante um determinado período de tempo.

Em outras palavras, ao se pressionar uma tecla positiva, o valor reportado para o script controlador do jogo referente ao input realizado subirá de 0 a 1 gradativamente durante algumas frações de segundo. O mesmo ocorre ao se deixar de pressionar essa tecla, “caindo” o valor reportado ao script de 1 até 0 também durante algumas frações de segundo.

Como em nosso jogo não estamos graduando a movimentação de Tratanildo pelo cenário com tamanho detalhismo, nem realizamos um controle fino da inclinação do labirinto, podemos alterar esse comportamento, visando reportar os valores dos inputs aos scripts controladores sem tanta suavização assim.

Volte a abrir a janela Project Settings, por intermédio da opção presente no menu Edit. Dentro do conjunto de opções Input Manager, expanda o grupo referente à primeira opção Horizontal. Altere os valores dos atributos Gravity e Sensitivity para 10. Realize a mesma intervenção para os atributos da opção seguinte, Vertical, conforme exemplificado pela imagem a seguir:

O atributo Sensitivity tem relação com a aceleração do valor reportado a partir do pressionamento de uma tecla digital, em unidades por segundo. Aumentando seu valor para 10, ao pressionarmos uma tecla, o valor sairá do “neutro ”(0) ao “definitivo” (1 ou -1) em apenas 0,1 segundo. Já o atributo Gravity é o responsável por ação semelhante, mas no “sentido inverso”, ao se deixar de pressionar uma tecla, voltando ao valor 0.

Feche a janela Project Settings e volte a experimentar a simulação da execução do jogo. Você perceberá que os controles agora estão bem mais próximos do que já estamos acostumados, porém melhorados, devido a nova possibilidade de se controlar os elementos utilizando um novo conjunto de teclas.

Ao término da simulação de execução, clique novamente sobre o ícone do botão Play e retorne à 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

A melhoria que implementamos hoje, apesar de parecer simples, é um dos passos iniciais para que possamos codificar nossos jogos para outras plataformas além dos PCs e computadores.

Os videogames, por exemplo, utilizam controles com botões e alavancas específicas, que podem ser configuradas por meio do Input Manager; o próprio computador também fornece a possibilidade de se utilizar um controle em vários de seus jogos, além do mouse e outros dispositivos de entrada. Portanto, experimentar uma forma diferente de se obter os inputs para os jogos é algo que pode nos abrir novas possibilidades.

Em nossos próximos encontros, daremos sequência ao processo de ajustes para o projeto como um todo, refinando aspectos do gameplay e nos aproximando da forma final de nossa aventura.

Nosso próximo encontro será no dia 26 de abril. Até mais! Fique sempre ligado nas novidades do GameBlast!
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).