No desenvolvimento de jogos 3D com o Unity Input System, uma das primeiras decisões de arquitetura que impacta diretamente a organização do código é: como o script do personagem deve ler os comandos do jogador?
Historicamente, o Unity trabalhou com abordagens baseadas em eventos (callbacks). No entanto, o padrão de Leitura Direta (Polling) vem ganhando forte espaço em controles de personagens em primeira pessoa (FPS) e terceira pessoa.
Neste artigo, analisamos as diferenças técnicas, vantagens e o contexto ideal para cada uma dessas abordagens.
1. Abordagem Event-Driven (Callbacks / OnMove)
Na abordagem baseada em eventos, o componente Player Input do Unity fica responsável por “avisar” o seu script sempre que um botão ou eixo muda de estado.
Como funciona?
O sistema dispara um método específico (como OnMove ou OnJump) via mensagens ou eventos do C#. O script intercepta esse evento, extrai o valor e o armazena em uma variável global da classe para ser utilizada posteriormente no loop principal.
C#
// --- ABORDAGEM VIA CALLBACK (EVENTOS) ---
public class PlayerControllerEvents : MonoBehaviour
{
private Vector2 moveInput;
// O Unity aciona este método automaticamente quando o teclado muda de estado
public void OnMove(InputValue value)
{
moveInput = value.Get<Vector2>();
}
private void Update()
{
// O movimento é executado utilizando o último valor armazenado
Vector3 move = new Vector3(moveInput.x, 0, moveInput.y);
transform.Translate(move * Time.deltaTime);
}
}
Vantagens:
- Reatividade Pura: O código só executa a leitura quando há alteração física nos periféricos.
- Desacoplamento de UI: Excelente para interfaces de usuário (menus, inventários), onde a ação só precisa ocorrer uma única vez ao clicar.
Desvantagens em Controle de Personagens:
- Poluição de Estado: Obriga a criação de múltiplas variáveis globais na classe para guardar os estados de cada botão (
moveInput,isJumping,isShooting). - Fragmentação do Fluxo: A lógica fica espalhada entre os métodos que recebem os eventos e os métodos de atualização (
Update/FixedUpdate).
2. Abordagem por Leitura Direta (Polling / ReadValue)
A abordagem por Leitura Direta (Polling Direct) inverte esse fluxo. Em vez de esperar ser notificado, o script do personagem consulta o estado atual das ações mapeadas exatamente no momento em que precisa processar a física ou o movimento.
Como funciona?
Obtemos referências diretas para o mapa de ações (InputAction) e executamos o .ReadValue<T>() ou .WasPressedThisFrame() dentro dos métodos do ciclo de vida da Unity (Update / FixedUpdate).
C#
// --- ABORDAGEM VIA LEITURA DIRETA (POLLING) ---
public class PlayerControllerPolling : MonoBehaviour
{
private InputAction moveAction;
private CharacterController controller;
private void Awake()
{
// Mapeamento direto da ação
moveAction = InputSystem.actions.FindAction("Move");
controller = GetComponent<CharacterController>();
}
private void Update()
{
HandleMovement();
}
private void HandleMovement()
{
// Consulta o teclado/controle no exato momento da execução
Vector2 input = moveAction.ReadValue<Vector2>();
Vector3 moveDirection = (transform.forward * input.y) + (transform.right * input.x);
controller.Move(moveDirection * Time.deltaTime);
}
}
Vantagens:
- Coesão e Leitura Linear: Todo o ciclo do movimento (ler o comando $\rightarrow$ calcular vetor $\rightarrow$ aplicar gravidade $\rightarrow$ mover) fica concentrado em um único bloco de código.
- Menos Variáveis Globais: Elimina a necessidade de manter variáveis de estado temporárias apenas para “guardar” o valor do comando.
- Sincronização Perfeita: A leitura do input e o cálculo da física ocorrem rigorosamente no mesmo frame, prevenindo divergências de amostragem (input lag ou leituras obsoletas).
Tabela Comparativa
| Critério | Abordagem por Eventos (OnMove) | Leitura Direta (ReadValue) |
| Paradigma | Reativo (Event-Driven) | Consultivo (Polling) |
| Uso de Variáveis | Exige variáveis membros para estado. | Utiliza variáveis locais nos métodos. |
| Clareza de Código | Espalhado em callbacks callbacks. | Concentrado e sequencial. |
| Uso Ideal | Interface de Usuário, Menus, Habilidades de clique único. | Movimentação contínua de Personagens (FPS, TPS, Racing). |
Conclusão
Embora a abordagem por eventos seja muito poderosa para sistemas reativos (como abrir um menu ao pressionar ESC), a Leitura Direta (ReadValue) se consolida como a escolha mais elegante e legível para sistemas de controle de personagens em tempo real.
Ela simplifica a depuração, torna o código autocontido e garante que a matemática de movimento e física seja aplicada de forma previsível a cada frame.



Add Comment