即使在明確患有的是心因性勃起障礙,需要正確的心理健康治療才能根治問題,仍是無可奈何地依靠服用犀利士、威而鋼等ED藥物。因為心理疾病難以完全治愈,一定條件下可從新觸發。

Desenvolvimento Desenvolvimento de jogos Unity

Arquiteturas de Input no Unity: Event-Driven vs. Polling Direct

a person holding a game controller
Photo by Yan Krukau on Pexels.com

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érioAbordagem por Eventos (OnMove)Leitura Direta (ReadValue)
ParadigmaReativo (Event-Driven)Consultivo (Polling)
Uso de VariáveisExige variáveis membros para estado.Utiliza variáveis locais nos métodos.
Clareza de CódigoEspalhado em callbacks callbacks.Concentrado e sequencial.
Uso IdealInterface 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.

About the author

Danilo Filitto

Mestre em Ciência da Computação pela Universidade Estadual de Maringá - UEM, Pós-Graduado em Redes de Computadores e Comunicação de Dados pela Universidade do Estado do Paraná - UEL, Bacharel em Ciência da Computação pela Universidade do Oeste Paulista - UNOESTE.

Atuo na área acadêmica como professor desde 2006. Atualmente leciono na UNOESTE (Universidade do Oeste Paulista), no SENAC (Serviço Nacional de Aprendizagem Comercial) e possuo vários cursos na Udemy (https://www.udemy.com/user/danilo-filitto/).

Além disso, sou o CEO dos sites https:www.dfilitto.com.br e https:www.makeindiegames.com.br

Você também pode me encontrar no YouTube por meio do endereço https://www.youtube.com/danilofilittoppr

Add Comment

Click here to post a comment

Aprenda a criar seus próprios jogos com os melhores desenvolvedores

Cursos em promoção

Cursos em destaque

Quer aprender a programar?

Teoria e prática