Como fazer um controlador de jogo personalizado com arduino e unidade

Alguma vez você já quis projetar seu próprio controlador do jogo? É mais fácil do que você pensa!

Neste curto espaço de projeto que vai construir um controlador de jogo personalizado simples de usar com o motor de jogo Unity. Este controlador será alimentado por um Arduino Uno, embora você poderia usar um dos muitas alternativas lá fora para este projeto também. Nós também irá criar um jogo básico, onde você vai usar o seu controlador para evitar queda de objectos e retardar o tempo.Guia Arduino compra: Qual conselho você deve começar?Guia Arduino compra: Qual conselho você deve começar?Há tantos tipos diferentes de placas Arduino lá fora, você seria perdoado por ter sido confundido. Que você deve comprar para o seu projeto? Vamos ajudar, com este guia de compra do Arduino!consulte Mais informação

Para este projeto você vai precisar

  • Arduino ou microcontrolador semelhante
  • 1 x 10k Ohm resistor
  • 1 x interruptor instantâneo
  • 1 x Potenciómetro
  • fios de gancho-se
  • A placa de ensaio
  • motor de jogo Unity
  • O plugin Uniduino da Unidade Asset Store (US $ 30)
  • código de projeto completo, no caso de você não quer escrevê-lo (não inclui o plugin Uniduino)

A maioria dessas coisas estão disponíveis em um kit inicial de Arduino. Se não tem um starter kit confira nosso guia para escolher o melhor um para você.4 Melhores Starter Kits para Iniciantes Arduino4 Melhores Starter Kits para Iniciantes ArduinoHá uma abundância de grandes projetos iniciante Arduino que você pode usar para começar, mas você precisará de um Arduino e alguns componentes primeiros. Aqui é a nossa escolha de 4 dos melhores kits para ...consulte Mais informação

Você pode fazer seu controlador tão complicado como você deseja, embora para este exemplo vamos criar um potenciômetro e um botão - perfeito para controlar um jogo simples.

Controlador personalizado Breadboard 670

Montando seu controlador

Configure sua placa de ensaio e Arduino, como mostrado na imagem abaixo. Isto é o que nós estaremos usando como nosso controlador de jogo, embora você poderia usar quase a mesma configuração exata como um controlador midi DIY também!Como Fazer um controlador MIDI com um ArduinoComo Fazer um controlador MIDI com um ArduinoComo um músico que acumulou uma coleção de instrumentos musicais e caixas de ruído, o humilde Arduino é a ferramenta perfeita para criar um controlador MIDI personalizado.consulte Mais informação

Fritzing Diagrama Annotated

Preparando seu Arduino

Depois de ter tudo cabeada, conecte o Arduino via USB. Em Arduino IDE Software cabeça para Ferramentas gt; Borda e Ferramentas gt; Porta para selecionar quais microcontrolador e porta que você está usando. O Arduino IDE vem com o esboço que precisamos, e você pode encontrá-lo sob Arquivo gt; Exemplos gt; Firmata gt; StandardFirmata. Clique em Upload e você estará pronto para ir.

Se você é novo no Arduino e sua cabeça está derretendo um pouco, consulte a nossa Guia do iniciante para ajudá-lo a obtê-lo a falar com o seu computador bem.Começando com o Arduino: Guia de um novatoComeçando com o Arduino: Guia de um novatoArduino é uma plataforma electrónica de prototipagem de código aberto baseado em flexível e fácil de usar hardware e software. É destinado a artistas, designers, entusiastas e qualquer pessoa interessada em criar objetos ou ambientes interativos.consulte Mais informação

Configurar o seu Projeto Unity

Na Unidade, abrir Janela gt; Asset Store para acessar Asset Store da Unidade de dentro do Editor do Unity. Pesquisar na loja de ativos para o plugin Uniduino. Este plugin lhe permitirá receber e enviar dados de e para os pinos de seu Arduino dentro da Unidade. O plug-in no momento da escrita custa R $ 30. É possível fazer esse projeto sem comprar o plugin, embora seja um pouco mais complicada e você pode encontrar o plugin mais conveniente todo.

Unidade Asset Store Uniduino

Este vídeo dos criadores do plugin leva você através do processo de testar tudo está funcionando, junto com a primeira configuração. Note que você também pode ter que redefinir o editor Unity no Windows.

Podemos usar este mesmo painel de teste para testar a nossa controlador. Definir Pin D2 para INPUT e Digital. Mais abaixo, definir Pin A5 para analógico. Seu potenciômetro e botão deve exibir valores na tela ao lado de seus números de pinos agora. Progresso!

Teste Uniduino

Agora, para fazer algo que podemos controlar

Portanto, temos um controlador, mas o que devemos controlar? Bem, as possibilidades são infinitas, mas por hoje vamos criar um jogo esquivando muito simples para testar o nosso novo sistema de controle. Vamos passar sobre a configuração do jogo muito rapidamente, por isso, se você estiver totalmente novo para o motor Unity você pode encontrar o nosso Unidade Jogo Programação Guia do Iniciante útil para se orientar.Programação de um jogo com Unity: Guia de um novatoProgramação de um jogo com Unity: Guia de um novatoNo cenário em evolução do desenvolvimento de jogos indie, Unidade emergiu como uma espécie de padrão de fato: seu baixo custo, facilidade de uso e ampla conjunto de características o tornam ideal para o desenvolvimento do jogo rápido.consulte Mais informação

Nós vamos construir um jogo muito básico em que o seu objectivo é evitar a sua esfera para a esquerda e direita para evitar cubos de queda, que irá utilizar o seu controlador personalizado recém-feitos.

Criar uma nova cena e arraste o pré-fabricada Uniduino de Ativos gt; Uniduino gt; prefabs em sua hierarquia e arraste o pré-fabricada Uniduino na hierarquia. Precisamos dele lá para fazer a falar entre o nosso jogo e controlador.

Video: Monte seu controlador de temperatura!

Na Unidade hierarquia clique Crio gt; Esfera e utilizar o separador Transform no Inspector para movê-lo para a parte inferior do ecrã do jogo.

Inspector Sphere X Posição

É Hora de obter a Codificação

Agora, para adicionar algum código para esta festa. Com a esfera selecionada na hierarquia, clique em Adicionar Componente gt; New Script na parte inferior da sua janela Inspector. Diga sphereMover e selecione C afiada a partir do menu drop-down. Clique Criar e Adicionar eo script vai ser adicionado ao GameObject. Dê um duplo clique sobre ele para abrir o script e digite este código:

utilização UnityEngine-utilização Sistema.Colecções-utilização Uniduino-público classe sphereMover : MonoBehaviour{// cabeçalhos não são scrictly neccesary, mas facilitar a vida de volta no Inspector.[Cabeçalho("Variáveis ​​Arduino")]// precisamos declarar o Arduino como uma variávelpúblico arduino Arduino-// precisamos declarar um inteiro para o número pin do nosso potenciômetro,// fazer essas variáveis ​​meios públicos podemos mudá-los no editor mais tarde// se mudar o layout do nosso arduinopúblico int potPinNumber-// uma variável float para conter o valor potenciômetro (0-1023)público flutuador potValue-// vamos mais tarde remapear que potValue para a posição y do nosso cápsula e mantenha-o nesta variávelpúblico flutuador mappedPot-// int público para o nosso pino do botãopúblico int buttonPinNumber-[Cabeçalho("Variáveis ​​Sphere")]// variáveis ​​para manter os valores observamos anteriormente para os lados da nossa telapúblico flutuador leftEdge-público flutuador rightEdge-// Utilize este para inicializaçãovazio Começar (){// e inicializar que deverá, começando com a variável Arduino. // estamos apenas usando um Arduino, para que possamos utilizar Arduino.global para agarrá-lo.arduino = Arduino.global-arduino.Configuração(ConfigurePins)-}vazio ConfigurePins(){// configurar o pino Arduino para ser analógico para o nosso potenciômetroarduino.pinMode(potPinNumber, pinMode.ANALOG)-// Diz o Arduino para relatar quaisquer alterações no valor da nossa potenciômetroarduino.reportAnalog(5, 1)-// configurar o nosso pin Botãoarduino.pinMode(buttonPinNumber, pinMode.ENTRADA)-arduino.reportDigital((byte)(buttonPinNumber / 8), 1)-}}

Tome um momento para ler os comentários de código. Até agora, temos declarado algumas variáveis ​​para o nosso Arduino, seus pinos, e nossa esfera. Temos também utilizado o
Iniciar e ConfigurePins métodos para inicializar o Arduino em tempo de execução. Permite salvar o nosso roteiro, e voltar para o editor de Unidade e ver o que mudou.

Sphere Mover Script Com Variáveis ​​vazios

agora podemos ver nossas variáveis ​​públicas na janela Inspetor. Vamos ver o que podemos entrar nesta fase para nos ajudar mais tarde. Sabemos o que é pin estamos usando no Arduino da nossa compilação anterior, podemos inseri-los. Nós também sabemos de nossa experiência anterior quão longe nós queremos nossa esfera de ser capaz de viajar esquerda e direita para que ele não cai fora da tela. Permite introduzir estes valores agora.

Sphere Mover Script Com Variáveis

Primeiros sinais de vida

É hora de ver realmente os valores do nosso Arduino dentro do Editor de Unity. Por agora, podemos adicionar uma linha de código para a função de atualização do nosso script sphereMover, e salvar o script novamente.

vazio Atualizar (){// Nós atribuir o valor do arduino está lendo do nosso potentionmeter a nossa variável potValuepotValue = arduino.analogRead(potPinNumber)-} 

Agora que temos a nossa variável potValue sendo atualizado a cada quadro, podemos ver que é valor em tempo real no Inspetor Unity. Antes de dar-lhe um teste, agora seria um bom momento para verificar que o Uniduino conecte está escutando na porta direita. Clique em Uniduino na hierarquia, e verificar que é Porto Nome do Inspector. Se estiver em branco, preencha o número de porta correto para o seu Arduino. Neste caso, foi COM4, ​​embora possa ser diferente para você. Verifique usando o Arduino IDE se você não tiver certeza.

Video: Arduino - Projeto controlador de ambiente (temperatura e umidade)

Uniduino Verifique porta está correcta

Selecione sua esfera na hierarquia e clique no botão Play no topo da tela. O sistema precisa de alguns segundos para inicializar, após o qual você deve começar a ver a mudança variável Pot Valor no Inspetor quando você mover o potenciômetro.

Signs of Life 2



Agora estamos falando! Bem, a rigor Unity eo Arduino estão falando, mas quem está contando? Se você chegou até aqui e não estão vendo a mudança de valor no inspetor, verificar sobre as etapas de configuração e verifique se você tem a porta correta selecionado para seu Arduino.

Video: Mini CNC com sucata 6 - Disquete + Arduino

Vamos Move This Sphere

Agora que temos a potValue variável que está sendo atualizado, queremos usar este valor para mover nossa esfera. Quando o potenciômetro é todo o caminho para a esquerda queremos que a esfera de estar no lado esquerdo da tela, e vice-versa. Objectos na unidade está posicionado num ponto no espaço vectorial, determinado pelos valores de é Transform.position. Na imagem abaixo, onde a esfera está no ponto mais à esquerda que iria querer isso, você pode ver que é isso vetor posição é de 9,5, -4, 0.

Transformar Exemplo 670

Queremos afetam a posição X da esfera. Infelizmente usando os valores da nossa potenciômetro diretamente não vai funcionar, como quando o potenciômetro é todo o caminho à esquerda que dá um valor de 0 - o que colocaria nossa esfera bem no meio da tela. No outro extremo, valor superior do potenciômetro, 1023, colocaria a forma de cubo para a direita da nossa tela. Nao é útil. O que precisamos aqui é um pouco de matemática.

Por que Math Quando Unity vai fazer isso por você?

Para aqueles de vocês lá fora, temendo olhando para um pedaço de papel coberto de números sem sentido (embora há alguns grandes sites que podem ajudá-lo a aprender Matemática), não medo. Precisamos de uma maneira de fazer os nossos valores potenciômetro para corresponder com a posição X da nossa esfera. Felizmente, podemos usar uma Método de extensão.Os 20 sites que você precisa para aprender matemática Passo a PassoOs 20 sites que você precisa para aprender matemática Passo a PassoReunimos os melhores locais para cada nível de modo que você pode aprender sistematicamente, ganhar uma compreensão melhor de matemática um nível de cada vez, e se divertir!consulte Mais informação

Um método de extensão é um script que faz um trabalho específico para nós. Neste caso, nós dar-lhe os valores que temos, e ele retorna-los mapeado para um um outro, pronto para ser usado em nosso sphereMover roteiro. Na parte superior do painel Project, clique em Crio gt; C # Script e nomeá-la ExtensionMethods. Digite o código abaixo no script:

utilização UnityEngine-utilização Sistema.Colecções-público estático classe ExtensionMethods {// nossa função Remapper dandy acessívelpúblico estático flutuador remap (esta flutuador valor, flutuador partir de 1 de, flutuador to1, flutuador from2, flutuador TO2){Retorna (valor - partir de 1 de) / (to1 - partir de 1 de) * (TO2 - from2) + from2-}}

Salve o script, e voltar para o seu script sphereMover. Podemos agora usar esta função Remapear em nosso script ExtensionMethods na nossa função de atualização para converter os nossos valores potenciômetro em valores utilizáveis ​​em nosso jogo. Sob onde acabou de atribuir a variável potValue, digite o seguinte:

Função remap

O prompt mostra-nos que o nosso Remap leva dois conjuntos de de e para valores, e mapeia-los juntos. Podemos entrar nossos valores para isso.

mappedPot = potValue.remap(0, 1023, leftEdge, rightEdge)-

Salve seu script, volte para o editor de Unidade, e aperte o botão play. Agora você deve ver que os mapeadas Pot variável muda quando você move o potenciômetro, para corresponder com os valores que determinados para o nosso bordas esquerda e direita. Tome um momento para sentar e agradecer o seu roteiro ExtensionMethods. Não uma calculadora à vista.

mapeados Pot

Nota: se você está percebendo que seus valores são invertidos, de modo que quando o seu potenciômetro é todo o caminho para a direita você está recebendo um valor negativo para a variável Pot mapeada, você pode ter o seu potenciômetro configurar o caminho errado rodada. Felizmente, você pode corrigir isso sem fazer qualquer religação. Você pode simplesmente mudar os valores quando você remapear-los:

interruptor Remap

Agora finalmente temos valores utilizáveis. Agora tudo o que resta a fazer é atribuir esses valores para a posição X da nossa esfera:

// atribui o valor pot mapeados para a posição x da esferatransformar.posição = Novo Vector3(mappedPot, transformar.posição.y, transformar.posição.z)-

Salve seu script, volte para o editor de Unidade e pressione play. Agora você deve ser capaz de mover o Sphere para a esquerda e direita com seu potenciômetro!

Colocar o botão para Trabalhar

Agora que temos nossa esfera em movimento, não seria bom ter uma maneira de retardar um pouco as coisas quando chegarmos em um local apertado? Nós vamos usar o nosso botão para abrandar o tempo em nosso jogo. Abra seu script sphereMover, e adicionar este código ao seu função de atualização

// se Unity detecta o botão está sendo pressionado, a escala de tempo desaceleraE se (arduino.digitalRead(buttonPinNumber) == 1){Tempo.escala de tempo = 0.4f-}outro Tempo.escala de tempo = 1.0f-

Agora temos a mecânica do nosso jogo, vamos adicionar alguns obstáculos! Nós estamos indo para usar o inimigo natural da esfera, o cubo. Na hierarquia, clique em Crio gt; 3d objeto gt; Cubo. No inspetor do cubo, Adicionar Componente gt; Física gt; Corpo rígido. Defina o valor do arrasto do corpo rígido a 5. Além disso, sob o componente Caixa Collider na inspector, selecione É Trigger. Isto irá permitir-nos detectar colisões com nosso Sphere.

Video: PROGRAMA PARA CONTROLE DE ANIMATRÔNICO | Curso de Arduino #043

Criar um script no cubo e chamá-lo collideWithSphere, abrir o script e excluir as funções de início e de atualização como nós não vai precisar deles neste momento. Introduzir este código:

utilização UnityEngine-utilização Sistema.Colecções-público classe collideWithSphere : MonoBehaviour{vazio OnTriggerEnter(Collider outra){Destruir(de outros.gameObject)-}}

OnTriggerEnter envia uma mensagem sempre que o colisor gatilho atinge outro colisor. Neste caso, estamos dizendo a ele para destruir tudo o que toca. Salve o script e voltar para o editor Unity. Arraste o cubo da hierarquia para o painel Project. Você notará que o texto do cubo na hierarquia ficou azul. Isso é porque nós criamos uma casa pré-fabricada e salva-lo em nosso projeto. Excluir seu cubo da hierarquia agora.

Tudo o que precisamos agora é um script para gerar os cubos. No clique hierarquia Crio gt; Criar vazio, e renomeá-lo para Jogo de Gerenciamento no Inspector e adicionar um script para que chamou gameManager. Abra o script e adicione este código:

utilização UnityEngine-utilização Sistema.Colecções-público classe gameManager : MonoBehaviour {// uma variável para armazenar o pré-fabricada que queremos para desovarpúblico GameObject cubo-// nós queremos algumas variáveis ​​para decidir como os cubos para desovar // e como alta acima de nós queremos que eles para desovarpúblico int numberToSpwan-público flutuador lowestSpawnheight-público flutuador highestSpawnheight-// Utilize este para inicializaçãovazio Começar (){para (int Eu = 0- Eu lt; numberToSpwan- Eu++){instanciar(cubo, Novo Vector3(Aleatória.Alcance(-9, 9), Aleatória.Alcance(lowestSpawnheight, highestSpawnheight), 0), quaternião.identidade)-}}// Update é chamado uma vez por quadrovazio Atualizar (){}}

Salve o script. Voltar no editor, selecione o Jogo de Gerenciamento na hierarquia, e arraste o cubo pré-fabricada a partir do painel do projeto para a variável Cube no Inspector. Preencha os valores para sua desova aqui também. Você pode mexer com ele para torná-lo tão fácil ou difícil como você gosta. Note-se que vale a pena ter os seus mais baixos cubos desovar alta o suficiente para permitir Uniduino para inicializar - perder o jogo antes de você é capaz de se mover pode ser frustrante!

jogo de Gerenciamento

O projeto final

Agora, quando você aperta o play, os cubos vão aparecer acima de você e cair. Você pode usar seu potenciômetro para evitá-los, e com o botão para abrandar tempo.

Neste projeto nós criamos um controlador personalizado com um Arduino, configurado Unidade e Uniduino se comunicar com ele, e criou um jogo simples para testá-lo. Os conceitos aqui pode ser aplicada a quase qualquer projeto, e há mesmo compotas jogo que se especializam em controladores personalizados.

Com Arduino e Unidade você poderia criar um controlador personalizado a partir de quase nada. Você criou um oi-fi que controla uma nave espacial? Uma torradeira que controla um jogo de plataforma?

Se você fez um projeto como este eu adoraria vê-lo! Postá-lo nos comentários abaixo!


Artigos relacionados