domingo, 16 de setembro de 2012

Xbox 360 Joystick Controller + Unity

Adquiri há algumas semanas um joystick do Xbox 360 próprio pra Windows e, apesar do meu intuito original ter sido o de jogar com o acessório (algo que obviamente não deixei de fazer), minha consciência de desenvolvedor não permitiu que o controle permanecesse em minha mesa sem se tornar o protagonista de um dos meus estudos/experimentos com a Unity.

Configurei o Bitz pra funcionar com o dito joystick além do teclado e mouse. E com algumas adaptações fiz o script pré-pronto MouseOrbit.js também aceitar o input do controle. O resultado pode ser visto no vídeo abaixo:


 


Segue aqui então uma curta explicação de como configurar a Unity pra receber o Xbox 360 Controller for Windows.

Para gerenciar as configurações de entrada do usuário a Unity dispõe de um recurso chamado Input Manager (acessível em Edit > Project Settings > Input), nele é possível criar, excluir ou modificar os padrões reconhecidos pelo programa, que a princípio são quatro: Botão do teclado ou mouse, movimento do mouse, eixo (axis) do joystick e movimento de janela. Toda vez que o usuário realiza uma destas quatro ações o Input Manager reconhece e processa a informação, facilitando o acesso através de scripts.

Na forma mais simples, as informações de entrada do usuário são interpretadas de acordo com um código (KeyCode) atribuído a cada tecla ou botão pressionado. No caso dos eixos (variáveis do tipo float que vão de -1 a 1 de acordo com a intensidade que um botão é pressionado), a Unity disponibiliza uma lista de todos os disponíveis, dez no total. Enquanto os KeyCodes podem ser acessados diretamente por scripts através de funções da classe Input, para conseguir resgatar os dados gerados por um eixo é necessário primeiro configurá-lo no Input Manager.

Os KeyCodes reservados a botões do controller têm o seguinte formato: "KeyCode.JoystickButton" seguido pelo número do botão. Segue um pequeno mapa com o número padrão de cada botão e os axix no Windows :D (caso use Mac, clique aqui).




Para configurar um novo eixo basta aumentar o parâmetro Size no Input Manager (Axes > Size). Fazendo isso será gerado um novo eixo configurável. Definidas as suas variáveis, como nos exemplos abaixo, é possível agora acessá-lo utilizando o nome atribuído:



Seguindo o exemplo da imagem, agora tenho dois axis acessáveis através de scripts com a função Input.GetAxis(string axisName), que no caso ficariam como Input.GetAxis("Right Analog X") e Input.GetAxis("Right Analog Y").

Desta maneira é possível atribuir funcionalidades aos eixos e botões do Xbox 360 Controller for Windows e com um pouco de gambiarra esforço é também possível adaptar os scripts pré-prontos da Unity para utilizar os eixos do controle, como no caso do Bitz, o MouseOrbit.js.

Qualquer dúvida, comentário, sugestão e/ou etc, sintam-se a vontade. :)

P.S: Demonstração do AnimationExporter funcionando, feita por um amigo da faculdade. :D
P.S.2: FanArt do Bob!


Nenhum comentário:

Postar um comentário