Comparação entre o novo e o antigo sistema de Input na Unity para mapeamento de ações.

Input System na Unity: Por Que Você Precisa Parar de Usar o Código Antigo AGORA

Introdução

Você já abriu um tutorial de movimento, copiou e colou a linha mágica Input.GetKey(KeyCode.Space) e ela funcionou? Ótimo.

Mas, e se você quiser que o pulo funcione também no controle? E se a pessoa estiver jogando em um celular? E se ela quiser remapear os botões?

Se você usa o sistema antigo (Input.GetKey), a resposta é: você vai ter que escrever muitas linhas de código confusas, cheias de if e else, e o seu projeto vai se tornar um M.U.P. de complexidade.

A gente sabe como é. O Legacy Input (o antigo) é fácil, mas ele é uma armadilha.

Este post é o seu mapa para o New Input System. Ele exige um passo extra no começo, mas ele resolve 90% dos seus problemas de input para o MVP do seu jogo.

O Inimigo: O Legacy Input System (O M.U.P. Escondido)

O sistema antigo é baseado em Polling. O que isso significa?

  1. Você pergunta: A cada frame, o seu código pergunta: “O botão A está apertado? E o B? E o espaço?”
  2. Problema: Ele é acoplado. Se você muda a tecla, você tem que mudar direto no código.
  3. Limitação Prática: Ele só entende teclado, mouse e joysticks básicos de forma simples. Suporte a multi-plataforma? Prepare-se para o caos e para anular o MVP.

Analogia Pragmática: Usar o Legacy Input é como ter um interruptor de luz embutido na parede. Você tem que ir lá e mexer no fio toda vez que quiser usar um controle ou um pedal.

O Herói: O New Input System (Pragmatismo e Flexibilidade)

O sistema novo (New Input System) é baseado em Events (Eventos).

  1. Ação dispara: O sistema avisa o seu código apenas quando uma ação acontece (o botão foi apertado, solto, ou está sendo segurado).
  2. Flexibilidade: Você define uma Ação (ex: “Pular”) e mapeia essa Ação para vários botões (tecla Espaço, botão A do controle, toque na tela, etc.) em um único arquivo de configuração.
RecursoLegacy InputNew Input System
InstalaçãoIntegrado na EnginePacote Externo (Window > Package Manager)
MapeamentoApenas via Código (direto)Arquivo de Ações (Fácil remapeamento)
Multi-PlataformaDifícil e manualFácil e automático
PerformancePolling (pergunta a cada frame)Eventos (avisa quando algo acontece)

Passo a Passo Pragmático para o Novo Sistema

Para o seu próximo projeto, use este processo:

1. Instalação (O Passo Extra)

Vá em Window > Package Manager. No canto superior esquerdo, mude para Unity Registry. Procure por Input System e clique em Install.

2. Criando o Mapa de Ações

Este é o coração do sistema.

  1. Clique com o botão direito em uma pasta de Assets e vá em Create > Input Actions. Chame de PlayerInputActions.
  2. Dê dois cliques no arquivo. Ele vai abrir a janela do Input System.
  3. Crie um Action Map (ex: Gameplay).
  4. Crie uma Action (ex: Jump).
  5. Defina o Binding (o botão): Clique no símbolo + em Jump e adicione o caminho (ex: /Keyboard/space). Adicione outro Binding para o controle (ex: /Gamepad/buttonSouth).

3. Conectando no Código (O Código Limpo)

Agora, você não vai mais perguntar se a tecla está apertada. Você só precisa receber o aviso.

Use o componente Player Input no seu jogador.

  1. Selecione seu personagem e clique em Add Component > Player Input.
  2. Arraste o arquivo PlayerInputActions que você criou para o campo Actions.
  3. Em Behavior, defina como Invoke Unity Events.

O Código C# (O MVP da Conexão):

No seu script de movimento, você só precisa de uma função que tenha o prefixo On e o nome da sua Action.

using UnityEngine;
using UnityEngine.InputSystem; // Importante para usar o Input System

public class NewInputMovement : MonoBehaviour
{
    // Ação chamada automaticamente pelo Unity quando a Ação 'Jump' é disparada
    public void OnJump(InputAction.CallbackContext context)
    {
        // Verifica se o botão foi apertado (started)
        if (context.started)
        {
            // Coloque sua lógica de pulo aqui
            Debug.Log("Pulou! (Via New Input System)");
            // Exemplo: rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
        }
    }
    
    // Para movimento contínuo (Horizontal)
    public void OnMove(InputAction.CallbackContext context)
    {
        // O valor do input (ex: -1, 0, 1) é lido aqui
        Vector2 inputVector = context.ReadValue<Vector2>();

        // Coloque sua lógica de movimento aqui (ex: na FixedUpdate)
        // Exemplo: horizontalInput = inputVector.x;
    }
}

Conclusão

O New Input System é o pragmatismo disfarçado de complexidade. Você gasta 10 minutos configurando o Action Map, mas ganha horas de manutenção de código e compatibilidade com múltiplos dispositivos.

Pare de lutar contra o código do passado. O MVP do seu jogo precisa de um input que funcione em qualquer lugar. O sistema novo te dá isso.

O que fazer agora: Tente criar um Action Map para Pular e Atirar. Comente aqui qual foi o Binding mais exótico que você configurou (Joystick, toque na tela, etc.).

No nosso próximo post, vamos atacar o coração da marca: como definir metas realistas para que seu projeto não vire um M.U.P.

Compartilhe !