Aprenda o Input System com tutoriais atualizados e nosso projeto de amostra, Warriors

Com o Input System, você pode configurar rapidamente controles para diversas plataformas, de dispositivos móveis a VR. Comece com nossos projetos de exemplo e novos tutoriais em vídeo para usuários iniciantes e intermediários.
A contribuição é essencial para tornar seus projetos em tempo real interativos. O sistema de entrada da Unity padroniza a maneira como você implementa controles e fornece novas funcionalidades avançadas. Ele foi verificado para o Unity 2019 LTS e versões mais recentes (consulte a documentação para obter uma lista completa de dispositivos de entrada suportados).
Nosso novo conteúdo tutorial pode ajudar você a começar rapidamente, mesmo se você for completamente novo no desenvolvimento para múltiplas plataformas. Se você já estiver familiarizado com os fluxos de trabalho, saiba mais sobre como usar o Input System para conduzir (outras) ferramentas do Unity, como Cinemachine ou Unity UI com Warriors, nosso principal projeto de exemplo.
Esta sessão Conheça os Desenvolvedores de março explica por que criamos esse novo sistema e inclui uma demonstração que descreve fluxos de trabalho para configurar o modo multijogador local, adicionar rapidamente controles de gamepad, gerar novos jogadores e implementar controles móveis. Rene Damm, desenvolvedor líder do Input System, também responde a perguntas do público sobre ferramentas e o roteiro da equipe.
Se você é um iniciante que quer apenas conhecer os fluxos de trabalho básicos de entrada do Unity, confira o projeto Roll-a-Ball atualizado no Unity Learn. Ele orienta você nas primeiras etapas, como instalar o pacote do Input System, adicionar um componente de Entrada do Playere aplicar dados de entrada ao Player.


Nossa série de protótipos também usa o Input System, como você pode ver neste vídeo e projeto de exemplo sobre como criar um chefe com animação procedural. O recurso de ação de entrada da nave espacial usa entrada para controles de movimento, disparo de projéteis laser e impulso.
Warriors é um projeto que demonstra ferramentas e APIs mais intermediárias com o Input System em uma configuração típica de jogo multiplataforma local em terceira pessoa. Ele está disponível para o Unity 2019 LTS e será atualizado para a versão 2020 LTS quando for lançado no ano que vem. Você pode baixar o projeto do GitHub, onde temos três ramificações disponíveis:
O projeto é construído em torno de personagens que podem ser controlados nos modos Single Player e Local Multiplayer . Quando o Gerenciador de Jogo estiver definido como Multiplayer Local, ele instanciará diversas instâncias do prefab Guerreiro. Como o prefab Warrior é configurado para usar o componente de entrada do jogador do sistema de entrada, cada instância do Warrior terá automaticamente um dispositivo de entrada conectado e pareado a ele.
O esquema de controle deste Guerreiro é configurado para jogo multiplataforma e alterna automaticamente entre o teclado e diferentes controles. Esta configuração fornece um exemplo de aplicação de suavização aos dados de entrada de tempo de execução brutos para que o movimento direcional do personagem seja uniforme, independentemente dos eixos de entrada (teclas do teclado ou joystick do gamepad) que o jogador usa. O esquema de controle a seguir também usa o pressionamento de um botão para uma animação básica de ataque.

O recurso de ação de entrada do Guerreiro também é configurado para dois mapas de ação diferentes: um para controlar o personagem (correr e atacar) e o outro para controlar a entrada do menu. Um jogo ou qualquer outro projeto interativo geralmente tem estados diferentes com requisitos de controle diferentes que compartilham as mesmas ligações de entrada.
Por exemplo, empurrar um joystick em uma direção fará com que o Guerreiro corra em direção àquele eixo. No entanto, quando o jogo é pausado, o jogador pode usar o joystick para navegar entre diferentes botões selecionáveis e opções no menu de pausa.
Usando o Input System, você pode facilmente configurar diferentes Mapas de Ação para vários cenários de esquema de controle e alterná-los, por componente PlayerInput, em tempo de execução com uma API simples:
playerInput.SwitchCurrentActionMap(stringForMapName);
Depois de configurar um Mapa de Ações para interagir com a IU, as ações podem ser atribuídas ao Módulo de Entrada de IU do Sistema de Eventos:

No projeto Warriors, cada jogador pode pausar o jogo e interagir com o menu de pausa. A interface de sobreposição consiste em alguns botões de opção e um painel de mudança de contexto à direita. O módulo de entrada da interface do usuário do Input System aplica ações atribuídas à interação com qualquer componente da Unity UI com o Interactable habilitado (como botões e controles deslizantes).

Essa interação da interface do usuário será isolada para o jogador específico que pressionou pausa. Por exemplo, se o Jogador 3 pausar o jogo, os Jogadores 1 e 2 não poderão interagir com ele, e somente o Jogador 3 estará no controle. Quando o Jogador 3 retoma o jogo, todos os controles do Jogador são retomados. Fazemos isso chamando os seguintes métodos em um componente PlayerInput:
playerInput.ActivateInput();
playerInput.DeactivateInput();
No menu da interface do usuário, há um painel de contexto para controles de revinculação em tempo de execução. Isso permite que você execute uma Revinculação Interativa para uma Ação de Entrada específica e defina uma nova vinculação de entrada para ela. Por exemplo, ao usar um controle de PlayStation, você pode revincular a ação de Ataque do botão Cruz para outro botão de entrada, como Triângulo ou R2.

Essa reassociação se aplica como uma substituição a um componente PlayerInput específico. Por exemplo, o Jogador 2 poderá reatribuir seu botão de Ataque a um botão diferente, mas isso não afetará o uso da Ação de Entrada de Ataque pelo Jogador 3.
A API para configurar uma revinculação interativa também contém uma operação para quando a revinculação for concluída. Isso permite que você configure seu próprio controle ao atualizar a interface do usuário, salvar o estado do jogo ou alterar qualquer outro elemento de jogabilidade com base neste evento.
private InputActionRebindingExtensions.RebindingOperation rebindOperation;
void StartInteractiveRebind()
{
rebindOperation = inputAction.PerformInteractiveRebinding().OnComplete(operation => RebindCompleted());
rebindOperation.Start();
}
void RebindCompleted()
{
rebindOperation.Dispose();
//Apply UI Changes (IE: New Binding Icon)
}
Além da integração do Sistema de Entrada com o Sistema de Eventos e a Unity UI, o projeto Warriors também demonstra como ele pode ser configurado para funcionar em conjunto com o Cinemachine. Uma configuração de câmera típica para um jogo em terceira pessoa contaria com uma câmera de acompanhamento orbital, onde a direção da visão é definida pela posição do mouse ou pela direção do joystick. O componente Provedor de entrada do Cinemachine pode ser adicionado a um equipamento de câmera Cinemachine Free Look, o que permite que uma ação de entrada envie dados do eixo Vector 2 diretamente para os valores de controle do eixo do Cinemachine. Na imagem abaixo, você pode ver que o CinemachineInputProvider está usando os dados de entrada da ação Look Input.

O Input System também contém uma variedade de APIs para que outros sistemas possam acessar dados em tempo de execução que podem ser exibidos na IU ou em outros recursos visuais. O projeto de exemplo Warriors usa dados da entrada do jogador para exibir informações como o dispositivo do jogador atual, o ID de entrada do jogador ou até mesmo para atualizar os controles de revinculação baseados na interface do usuário na vinculação atual. Criamos um sistema personalizado que pega o dispositivo e as strings de vinculação e retorna um ícone específico.
Por exemplo, se o jogador estiver usando um controle do Xbox e a ação Atacar estiver vinculada ao botão de contexto do norte, isso exibirá um ícone do botão Y. Entretanto, se o jogador estiver usando um teclado, ele exibirá uma sequência para a tecla do teclado atualmente vinculada. Você pode extrair e usar esta ferramenta Device Display Configurator em seus próprios projetos.

O pacote do Input System também contém vários exemplos extras que você pode explorar no Gerenciador de Pacotes. Você pode usá-los como referência e estendê-los ou adaptá-los para seus próprios projetos. Você também pode encontrar a documentação oficial lá, incluindo este Guia de início rápido.
O Input System 1.1 está atualmente em fase de pré-visualização e traz muitas correções e algumas melhorias. Agora você pode salvar e carregar rebinds como JSON (veja o script de exemplo RebindSaveLoad.cs) e os layouts de dispositivos agora podem ser pré-compilados, reduzindo bastante o tempo de instanciação e o custo de heap de coleta de lixo (GC) para esses dispositivos.
Esperamos que o projeto de amostra e os outros materiais de aprendizagem ajudem você a começar a usar o Input System para dar vida às suas ideias. Por favor, compartilhe o que você quer aprender em seguida na seção de comentários abaixo. Além disso, fique de olho na página do Input System para mais tutoriais e outros recursos.
