Kuidas teha kohandatud mängukontrollerit Arduino ja Unity abil

Kuidas teha kohandatud mängukontrollerit Arduino ja Unity abil

Kas olete kunagi tahtnud kujundada oma mängukontrolleri? See on lihtsam kui arvate!





Selles lühikeses projektis ehitame lihtsa kohandatud mängukontrolleri, mida kasutada Unity mängumootoriga. Selle kontrolleri toiteallikaks on Arduino Uno, kuigi ka selle projekti jaoks võite kasutada ühte paljudest alternatiividest. Loome ka põhimängu, kus kasutate oma kontrollerit, et vältida esemete kukkumist ja aeglustada aega.





Selle projekti jaoks vajate

  • Arduino vms mikrokontroller
  • 1 x 10k oomi takisti
  • 1 x hetkeline lüliti
  • 1 x potentsiomeeter
  • Haakimisjuhtmed
  • Leivalaud
  • Unity mängumootor
  • Uniduino pistikprogramm Unity Asset Store'ist (30 dollarit)
  • Täitke projekti kood juhuks, kui te ei soovi seda välja kirjutada (ei sisalda Uniduino pistikprogrammi)

Enamik neist asjadest on saadaval Arduino stardikomplektis. Kui teil pole stardikomplekti, vaadake meie juhendit, et valida endale parim.





Saate muuta oma kontrolleri nii keeruliseks kui soovite, kuigi selle näite jaoks seadistame potentsiomeetri ja nupu - ideaalne lihtsa arkaadmängu juhtimiseks.

Kontrolleri kokkupanek

Seadistage oma leivalaud ja Arduino, nagu on näidatud alloleval pildil. Seda kasutame oma mängukontrollerina, kuigi saate kasutada peaaegu täpselt sama seadistust nagu a DIY midi kontroller ka!



Arduino ettevalmistamine

Kui olete kõik juhtmega ühendanud, ühendage Arduino USB kaudu. Arduino tarkvaras IDE minge aadressile Tööriistad> Tahvel ja Tööriistad> Port kasutatava mikrokontrolleri ja pordi valimiseks. Arduino IDE on komplekteeritud vajaliku visandiga ja selle leiate alt Fail> Näited> Firmata> StandardFirmata . Klõpsake nuppu Laadi üles ja olete kasutamiseks valmis.

Kui olete Arduino uus ja teie pea kergelt sulab, vaadake meie Algaja juhend mis aitavad teil arvutiga kenasti rääkida.





Ühtsuse projekti seadistamine

Unity'is avage Aken> Varapood pääseda Unity vara poodi Unity Editori kaudu. Otsige varade poest Uniduino pistikprogrammi. See pistikprogramm võimaldab teil Unity sees olevaid Arduino tihvte vastu võtta ja sealt andmeid saata. Pistikprogramm kirjutamise ajal maksab 30 dollarit. See on võimalik teha seda projekti ilma pistikprogrammi ostmata, kuigi see on üsna keerulisem ja võib -olla tundub, et pistikprogramm on igati mugavam.

See pistikprogrammi loojate video juhendab teid, kuidas testida kõike, mis töötab, koos esmakordse seadistamisega. Pange tähele, et peate võib -olla ka Windowsi Unity redaktori lähtestama.





Sama kontrollerit saame kasutada ka kontrolleri testimiseks. Seadke pin D2 asendisse INPUT ja Digital. Allpool seadke tihvt A5 asendisse ANALOG. Teie potentsiomeeter ja nupp peaksid nüüd kuvama väärtusi ekraanil nende pin -numbrite kõrval. Edusammud!

Nüüd teeme midagi, mida saame kontrollida

Nii et meil on kontroller, aga mida me kontrollime? Noh, võimalusi on lõputult, kuid täna loome uue juhtimissüsteemi katsetamiseks väga lihtsa põiklemismängu. Liigume mängu seadistamise üle üsna kiiresti, nii et kui olete Unity mootori jaoks täiesti uus, võite leida meie Unity mängu programmeerimise algajate juhend kasulik oma seisukohti saada.

Ehitame väga lihtsa mängu, milles teie eesmärk on vältida oma sfääri vasakule ja paremale, et vältida kuubikute kukkumist, mis kasutab teie äsja valmistatud kohandatud kontrollerit.

Looge uus stseen ja lohistage Uniduino paneel Varad> Uniduino> Eelvalikud oma hierachiasse ja lohistage Uniduino paneel hierarhiasse. Me vajame seda seal, et rääkida oma mängu ja kontrolleri vahel.

Klõpsake Unity hierarhias Loo> Sfäär ja kasutage Inspektori vahekaarti Teisenda, et see mänguekraani allossa viia.

On aeg kodeerida

Nüüd lisage sellele peole mõni kood. Kui sfäär on hierarhias valitud, klõpsake nuppu Lisa komponent> Uus skript inspektori akna allosas. Nimetage see sphereMover ja valige C Terav rippmenüüst. Klõpsake nuppu Loo ja lisa ja skript lisatakse GameObjecti. Skripti avamiseks topeltklõpsake seda ja sisestage see kood:

using UnityEngine;
using System.Collections;
using Uniduino;
public class sphereMover : MonoBehaviour
{
//Headers aren't scrictly neccesary, but they make life easier back in the Inspector.
[Header('Arduino Variables')]
//we need to declare the Arduino as a variable
public Arduino arduino;
//we need to declare an integer for the pin number of our potentiometer,
//making these variables public means we can change them in the editor later
//if we change the layout of our arduino
public int potPinNumber;
//a float variable to hold the potentiometer value (0 - 1023)
public float potValue;
//we will later remap that potValue to the y position of our capsule and hold it in this variable
public float mappedPot;
//public int for our button pin
public int buttonPinNumber;
[Header('Sphere Variables')]
//variables to hold the values we noted earlier for the sides of our screen
public float leftEdge;
public float rightEdge;
// Use this for initialization
void Start ()
{//and initialize we shall, starting with the Arduino Variable.
//we are only using one arduino, so we can use Arduino.global to grab it.
arduino = Arduino.global;
arduino.Setup(ConfigurePins);
}
void ConfigurePins()
{
//configure the Arduino pin to be analog for our potentiometer
arduino.pinMode(potPinNumber, PinMode.ANALOG);
//Tell the Arduino to report any changes in the value of our potentiometer
arduino.reportAnalog(5, 1);
//configure our Button pin
arduino.pinMode(buttonPinNumber, PinMode.INPUT);
arduino.reportDigital((byte)(buttonPinNumber / 8), 1);
}
}

Võtke aega koodikommentaaride lugemiseks. Siiani oleme oma Arduino, selle tihvtide ja meie sfääri jaoks teatanud mõned muutujad. Oleme kasutanud ka

Start ja ConfigurePins meetodid meie Arduino initsialiseerimiseks tööaja jooksul. Salvestame oma skripti ja läheme tagasi Unity redaktorisse ja vaatame, mis on muutunud.

Nüüd näeme oma avalikke muutujaid inspektori aknas. Vaatame, mida saame selles etapis sisestada, et meid hiljem aidata. Me teame, milliseid tihvte me Arduino peal kasutame, meie varasemast ehitamisest, saame need sisestada. Samuti teame oma varasemast katsest, kui kaugele me tahame, et meie sfäär saaks sõita vasakule ja paremale, et see ekraanilt maha ei kukuks. Sisestage need väärtused kohe.

Esimesed elumärgid

On aeg tegelikult näha meie Arduino väärtusi Unity Editoris. Praegu võime lisada oma sphereMoveri skripti värskendusfunktsioonile ühe koodirida ja skripti uuesti salvestada.

void Update ()
{
//We assign the value the arduino is reading from our potentionmeter to our potValue variable
potValue = arduino.analogRead(potPinNumber);
}

Nüüd, kui meie muutujat potValue värskendatakse igal kaadril, näeme selle väärtust reaalajas Unity Inspectoris. Enne kui proovile paneme, oleks nüüd õige aeg kontrollida, kas Uniduino pistikupesa kuulab õiget porti. Klõpsake Heirarchy'is Uniduino ja kontrollige inspektori inspektsioonis pordi nime. Kui see on tühi, sisestage Arduino jaoks õige pordi number. Sel juhul oli see COM4, ​​kuigi see võib teie jaoks olla erinev. Kui pole kindel, kontrollige Arduino IDE abil.

Valige oma sfäär hierarhias ja klõpsake ekraani ülaosas nuppu Esita. Süsteem vajab initsialiseerimiseks paar sekundit, mille järel peaksite potentsiomeetri liigutamisel nägema inspektoris muutuvat potiväärtuse muutust.

Nüüd me räägime! Noh, rangelt võttes räägivad Unity ja Arduino, aga kes loeb? Kui olete nii kaugele jõudnud ja te ei näe inspektori väärtuse muutumist, kontrollige seadistamisetappe ja veenduge, et teie Arduino jaoks oleks valitud õige port.

Liigutagem seda sfääri

Nüüd, kui oleme muutnud muutujat potValue, tahame seda väärtust oma valdkonna liigutamiseks kasutada. Kui potentsiomeeter on täiesti vasakule, tahame, et kera oleks ekraani vasakul küljel ja vastupidi. Ühtsuse objektid paigutatakse vektorruumi punkti, mille määravad selle väärtused Teisenda.positsioon . Alloleval pildil, kus kera asub vasakul kõige kaugemas punktis, mida me sooviksime, näete, et selle positsioonivektor on 9,5, -4, 0.

Tahame mõjutada sfääri X positsiooni. Kahjuks ei tööta meie potentsiomeetri väärtuste kasutamine otse, sest kui potentsiomeeter on täiesti vasakul, annab see väärtuseks 0 - mis paneks meie sfääri otse ekraani keskele. Teises äärmuses paigutaks potentsiomeetri tippväärtus 1023 kuubi meie ekraanist paremale. Pole kasulik. Siin on vaja natuke matemaatikat.

Miks teha matemaatikat, kui ühtsus teeb seda teie jaoks?

Neile, kes kardavad mõttetute numbritega kaetud paberitükki jõllitada (kuigi on mõned suurepäraseid veebisaite mis aitab teil matemaatikat õppida), ärge kartke. Vajame viisi, kuidas muuta meie potentsiomeetri väärtused vastavaks meie sfääri X -positsioonile. Õnneks saame kasutada Laiendamise meetod .

Laiendusmeetod on skript, mis teeb meie jaoks kindla töö. Sel juhul anname talle väärtused, mis meil on, ja see tagastab need üksteisele kaardistatuna, mis on meie jaoks kasutamiseks valmis sphereMover skript. Klõpsake paneeli Projekti ülaosas nuppu Loo> C# Skript ja nimetage see ExtensionMethods. Sisestage allolev kood skripti:

using UnityEngine;
using System.Collections;
public static class ExtensionMethods {

//our handy dandy Remapper function
public static float Remap (this float value, float from1, float to1, float from2, float to2)
{
return (value - from1) / (to1 - from1) * (to2 - from2) + from2;
}
}

Salvestage skript ja minge tagasi oma sphereMoveri skripti juurde. Nüüd saame seda Remap -funktsiooni kasutada oma ExtensionMethods -i skriptis oma värskendusfunktsioonis, et muuta meie potentsiomeetri väärtused meie mängu kasutatavaks väärtuseks. Tippige sinna, kuhu määrasime muutuja potValue, järgmine käsk:

Viip näitab meile, et meie Remap võtab kaks väärtuste komplekti From ja To ning kaardistab need koos. Sellesse saame sisestada oma väärtused.

mappedPot = potValue.Remap(0, 1023, leftEdge, rightEdge);

Salvestage oma skript, minge tagasi Unity redaktorisse ja vajutage esitusnuppu. Nüüd peaksite nägema, et kaardistatud poti muutuja muutub potentsiomeetri liigutamisel, et see vastaks meie vasaku ja parema serva jaoks määratud väärtustele. Võtke hetk maha ja tänage oma ExtensionMethods skripti. Kalkulaator pole silmapiiril.

Märkus: kui märkate, et teie väärtused on vastupidised, siis kui teie potentsiomeeter on täiesti paremale, saate oma kaardistatud poti muutuja negatiivse väärtuse, võib juhtuda, et potentsiomeeter on valesti seadistatud. Õnneks saate selle parandada ilma uuesti ühendamata. Saate väärtusi nende ümberkorraldamisel lihtsalt vahetada:

Nüüd on meil lõpuks kasutatavad väärtused. Nüüd jääb üle vaid need väärtused määrata meie sfääri X -positsioonile:

Kas saate kasutada erineva suurusega rammi
//Assign the mapped pot value to the sphere's x position
transform.position = new Vector3(mappedPot, transform.position.y, transform.position.z);

Salvestage oma skript, minge tagasi Unity redaktorisse ja vajutage esita. Nüüd peaksite saama oma sfääri oma potentsiomeetri abil vasakule ja paremale liigutada!

Nupu tööle panemine

Kas nüüd, kui meie sfäär liigub, kas poleks tore, kui meil oleks kitsas olukorras võimalus asju veidi aeglustada? Me kasutame oma nuppu oma mängu aja aeglustamiseks. Avage oma sphereMover -skript ja lisage see kood värskendusfunktsioonile

//if Unity detects the button is being pressed, the time scale slows down
if (arduino.digitalRead(buttonPinNumber) == 1){
Time.timeScale = 0.4f;
}
else Time.timeScale = 1.0f;

Nüüd on meil oma mängu mehaanika, lisame mõned takistused! Kasutame sfääri looduslikku vaenlast, kuubi. Klõpsake hierarhias nuppu Loo> 3D objekt> Kuup . Kuubi inspektoris, Lisa komponent> Füüsika> Jäik keha . Määrake jäiga kere väärtuseks 5. Samuti valige inspektori kasti põrkeseadme komponendi all valik Is Trigger. See võimaldab meil tuvastada kokkupõrkeid meie sfääriga.

Looge kuubikule skript ja helistage sellele põrkumaSfääriga , avage skript ja kustutage funktsioonid Start ja Update, kuna me ei vaja neid seekord. Sisestage see kood:

using UnityEngine;
using System.Collections;
public class collideWithSphere : MonoBehaviour
{
void OnTriggerEnter(Collider other)
{
Destroy(other.gameObject);
}
}

OnTriggerEnter saadab sõnumi iga kord, kui päästiku põrkur tabab teist põrkurit. Sel juhul käsime tal hävitada kõik, mida see puudutab. Salvestage skript ja minge tagasi Unity redaktorisse. Lohistage kuup hierarhiast projektipaneelile. Näete, et hierarhia kuubi tekst on muutunud siniseks. Selle põhjuseks on asjaolu, et oleme loonud eelmooduli ja salvestanud selle oma projekti. Kustutage oma kuup kohe hierarhiast.

Nüüd vajame ainult skripti kuubikute kudemiseks. Klõpsake hierarhias Loo> Loo tühi ja nimetage see inspektoris Game Manageriks ümber ning lisage sellele skript gameManager. Avage skript ja lisage see kood:

using UnityEngine;
using System.Collections;
public class gameManager : MonoBehaviour {
//a variable to hold the prefab we want to spawn
public GameObject cube;
//we want some variables to decide how any cubes to spawn
//and how high above us we want them to spawn
public int numberToSpwan;
public float lowestSpawnheight;
public float highestSpawnheight;
// Use this for initialization
void Start ()
{
for (int i = 0; i {
Instantiate(cube, new Vector3(Random.Range(-9, 9), Random.Range(lowestSpawnheight, highestSpawnheight), 0), Quaternion.identity);
}
}

// Update is called once per frame
void Update ()
{

}
}

Salvestage skript. Tagasi redaktorisse valige hierarhiast Mänguhaldur ja lohistage oma kuubiku eelpaneel projektipaneelilt inspektori kuubiku muutujale. Täitke oma kudemise väärtused ka siin. Saate sellega viirastada, et muuta see nii raskeks või lihtsaks kui soovite. Pange tähele, et madalamad kuubikud peaksid olema piisavalt kõrgel, et Uniduino saaks lähtestada - mängu kaotamine enne liikumist võib olla masendav!

Lõppenud projekt

Nüüd, kui vajutate esitusnuppu, hakkavad kuubikud teie kohal kudema ja kukkuma. Nende vältimiseks saate kasutada oma potentsiomeetrit ja aeglustada oma nuppu.

Selles projektis oleme loonud kohandatud kontrolleri koos Arduinoga, konfigureerinud Unityino ja Uniduino sellega suhtlema ning loonud lihtsa mängu selle testimiseks. Siinseid mõisteid saab rakendada peaaegu iga projekti jaoks ja isegi neid mängud, mis on spetsialiseerunud kohandatud kontrolleritele .

Arduino ja Unity abil saate luua kohandatud kontrolleri peaaegu kõigest. Kas olete loonud hifi, mis juhib kosmoselaeva? Röster, mis juhib platvormimängu?

Kui olete sellise projekti teinud, tahaksin seda näha! Postitage see allpool olevatesse kommentaaridesse!

Jaga Jaga Piiksuma E -post 6 kuuldavat alternatiivi: parimad tasuta või odavad audioraamaturakendused

Kui teile ei meeldi heliraamatute eest maksta, siis siin on mõned suurepärased rakendused, mis võimaldavad teil neid tasuta ja seaduslikult kuulata.

Loe edasi
Seotud teemad
  • DIY
  • Programmeerimine
  • Arduino
  • Mängu kontroller
  • Mängu arendamine
Autori kohta Ian Buckley(Avaldatud 216 artiklit)

Ian Buckley on vabakutseline ajakirjanik, muusik, esineja ja videoprodutsent, kes elab Saksamaal Berliinis. Kui ta parasjagu ei kirjuta ega laval, nokitseb ta isetehtud elektroonika või koodi kallal, lootuses saada hulluks teadlaseks.

Rohkem Ian Buckleylt

Telli meie uudiskiri

Liituge meie uudiskirjaga, et saada tehnilisi näpunäiteid, ülevaateid, tasuta e -raamatuid ja eksklusiivseid pakkumisi!

Tellimiseks klõpsake siin
Kategooria Diy