Kako napraviti prilagođeni kontroler igre s Arduinom i Jedinstvom

  • Harry James
  • 0
  • 3740
  • 922
Oglas

Jeste li ikada željeli dizajnirati vlastiti kontroler za igre? Lakše je nego što mislite!

U ovom kratkom projektu izgradit ćemo jednostavan prilagođeni kontroler igara koji se koristi s mehanizmom za igru ​​Unity. Ovaj kontroler napajat će Arduino Uno, mada biste mogli upotrijebiti jednu od mnogih alternativnih Vodiča za kupnju Arduinova: Koju ploču trebate nabaviti? Vodič za kupnju Arduinoa: Koji odbor trebate dobiti? Postoji toliko mnogo različitih Arduino ploča vani da bi vam bilo oprošteno što ste zbunjeni. Koje biste trebali kupiti za svoj projekt? Pomozite nam s ovim vodičem za kupovinu Arduino-a! vani i za ovaj projekt. Također ćemo kreirati osnovnu igru ​​u kojoj ćete pomoću kontrolera izbjeći pad predmeta i usporavanje vremena.

Za ovaj će vam projekt trebati

  • Arduino ili sličan mikrokontroler
  • Otpornik 1 x 10k Ohm
  • 1 x trenutni prekidač
  • 1 x potenciometar
  • Žice za spajanje
  • Ploča za kruh
  • Jedinstveni motor
  • Uniduino dodatak iz Unity Asset Store (30 USD)
  • Kompletni kod projekta, u slučaju da ga ne želite otpisati (ne uključuje Uniduino dodatak)

Većina ovih stvari dostupna je u Arduino starter setu. Ako nemate početni komplet, pogledajte naš vodič za odabir 4 najbolje početne setove za početnike Arduinoa 4 najbolje početne setove za početnike Arduinoa Puno je sjajnih Arduino projekata za početnike koje možete koristiti za početak, ali prvo treba Arduino i neke komponente. Evo našeg odabira 4 najbolje početne setove za ... jedan za vas.

Vaš kontroler možete učiniti kompliciranim koliko želite, iako ćemo za ovaj primjer postaviti potenciometar i gumb - pogodno za kontrolu jednostavne arkadne igre.

Sastavljanje vašeg kontrolera

Postavite ploču i Arduino kao što je prikazano na slici ispod. Ovo ćemo koristiti kao naš kontroler za igre, iako biste mogli upotrijebiti gotovo potpuno istu postavku kao DIY midi kontroler Kako napraviti MIDI kontroler s Arduinom Kako napraviti MIDI kontroler s Arduinoom Kao glazbenik koji je nagomilao kolekcija glazbenih instrumenata i kutija za buku, skromni Arduino savršen je alat za stvaranje prilagođenog MIDI kontrolera. isto!

Priprema svoj Arduino

Kad sve povežete, povežite svoj Arduino putem USB-a. U ID-u Arduino softvera idite na Alati> Ploča i Alati> Luka za odabir mikrokontrolera i priključka koji koristite. Arduino IDE dolazi u paketu s potrebnom skicom, a možete je pronaći ispod Datoteka> Primjeri> Firmata> StandardFirmata. Kliknite Učitaj i bit ćete spremni za rad.

Ako ste novi u Arduinu i glava vam se blago topi, pogledajte naš Vodič za početnike Početak rada s Arduinom: Vodič za početnike Početak rada s Arduinom: Vodič za početnike Arduino je platforma za prototiranje elektronike otvorenog koda koja se temelji na fleksibilnoj i jednostavnoj koristite hardver i softver. Namijenjen je umjetnicima, dizajnerima, hobistima i svima koji su zainteresirani za stvaranje interaktivnih objekata ili okruženja. da bi vam pomogao da lijepo razgovarate s računalom.

Postavljanje vašeg projekta jedinstva

U Jedinstvu otvorite Prozor> Trgovina imovine za pristup Unity's Asset Store iz Unity Editor-a. Pretražite u Asset Storeu Uniduino dodatak. Ovaj dodatak omogućit će vam primanje i slanje podataka na i sa vaših Arduino igara unutar Unitya. Dodatak u trenutku pisanja košta 30 dolara. Ovaj je projekt moguće napraviti bez kupnje dodatka, no on je prilično kompliciran i možda će vam dodatak biti prikladniji svuda.

Ovaj videozapis autora stvaralačkog dodatka vodi vas kroz postupak testiranja da sve radi, kao i prvo postavljanje. Imajte na umu da ćete možda morati resetirati uređivač Unity na Windows.

Pomoću te iste testne ploče možemo testirati naš kontroler. Postavite Pin D2 na INPUT i Digital. Dalje prema dolje, postavite Pin A5 na ANALOG. Vaš potenciometar i gumb sada bi trebali prikazivati ​​vrijednosti na ekranu pored njihovih PIN broja. Napredak!

Sada da napravimo nešto što možemo kontrolirati

Dakle, imamo kontroler, ali što ćemo kontrolirati? Pa, mogućnosti su beskrajne, ali za danas ćemo stvoriti vrlo jednostavnu igru ​​izmicanja za testiranje našeg novog upravljačkog sustava. Preći ćemo preko postava igre prilično brzo, tako da ako ste potpuno novi u Unity engine-u, možete pronaći naš Unity Game Programiranje Vodič za početnike Programiranje igre s jedinstvom: Vodič za početnike Programiranje igre s jedinstvom: Vodič za početnike u evoluciji krajolik razvoja indie igara, Jedinstvo se pojavilo kao nešto što je de-facto standard: niski troškovi, jednostavnost upotrebe i široki set značajki čine ga idealnim za brzi razvoj igara. korisno da nabavite svoje ležajeve.

Izgradit ćemo vrlo osnovnu igru ​​u kojoj vam je cilj dodavanje vaše sfere lijevo i desno kako biste izbjegli pad kockica, a to će koristiti vaš novo napravljeni prilagođeni kontroler.

Stvorite novu scenu i povucite Uniduino prefab iz Sredstva> Uniduino> Prefabs u vašu hijerahiju i prevucite preklopnik Uniduino u hijerarhiju. Trebamo ga tamo da razgovaramo između naše igre i kontrolera.

U hijerarhiji Jedinstva kliknite Stvori> Sfera i koristite karticu Pretvori u Inspektoru za pomicanje na dno zaslona igre.

Vrijeme je za kodiranje

Sada dodajte malo koda ovoj stranci. Sa sferom odabranom u Hijerarhiji kliknite Dodajte komponentu> Nova skripta pri dnu prozora inspektora. Imenuj sphereMover i odaberite C Oštro iz padajućeg izbornika. Klik Stvorite i dodajte a skripta će biti dodana u GameObject. Dvaput kliknite na nju da otvorite skriptu i unesete ovaj kôd:

korištenje UnityEngine; pomoću System.Collections; koristeći Uniduino; Sfera javne klaseMover: MonoBehaviour // Zaglavlja nisu nužno potrebna, ali život im se olakšava u Inspektoru. [Header ("Arduino varijable")] // moramo Arduino proglasiti varijabilnom javnom Arduino arduino; // trebamo proglasiti cijeli broj za pin broj našeg potenciometra, // čineći ove varijable javnim znači da ih možemo kasnije promijeniti u uređivaču // ako promijenimo izgled našeg arduino public int potPinNumber; // pomična varijabla koja drži vrijednost potenciometra (0 - 1023) javna plutajuća potValue; // Kasnije ćemo ponovno postaviti taj potValue u položaj y naše kapsule i zadržati ga u ovom varijabilnom javnom float mappedPot; // javni int za naš gumb pin public int buttonPinNumber; [Zaglavlje ("Sferne varijable")] // varijable za držanje vrijednosti koje smo ranije zabilježili za stranice našeg javnog ekrana plutaju leftEdge; javni plutajući rightEdge; // Koristi ovu za inicijalizaciju void Start () // i inicijaliziraćemo je, počevši od Arduino varijable. // koristimo samo jedan arduino, tako da ga možemo koristiti Arduino.global da ga zgrabimo. arduino = Arduino.global; arduino.Setup (ConfigurePins);  void ConfigurePins () // konfigurirajte Arduino pin da bude analogan našem potenciometru arduino.pinMode (potPinNumber, PinMode.ANALOG); // Recite Arduinu da izvještava o svim promjenama u vrijednosti našeg potenciometra arduino.reportAnalog (5, 1); // konfigurirajte naš pin gumba arduino.pinMode (buttonPinNumber, PinMode.INPUT); arduino.reportDigital ((bajt) (gumbPinNumber / 8), 1); 

Na trenutak pročitate komentare koda. Do sada smo proglasili neke varijable za naš Arduino, njegove igle i našu Sferu. Koristili smo i
Start i ConfigurePins metode za inicijalizaciju našeg Arduino na vrijeme izvođenja. Ostavimo spremanje naše skripte i vratimo se u uređivač Unitya i pogledajte što se promijenilo.

Naše javne varijable sada možemo vidjeti u prozoru Inspector. Da vidimo što možemo ući u ovoj fazi da nam pomogne kasnije. Znamo koje pince koristimo na Arduinu iz naše izrade ranije, možemo ih unijeti. Također iz ranijeg eksperimenta znamo koliko daleko želimo da naša sfera može putovati lijevo i desno kako ne bi pala s ekrana. Neka sad unese ove vrijednosti.

Prvi znakovi života

Vrijeme je da zapravo vidimo vrijednosti našeg Arduinoa u uređivaču Jedinstva. Za sada možemo dodati jedan redak koda u funkciju Ažuriranje naše skripte i ponovo spremiti skriptu.

void Update () // Dijelimo vrijednost koju arduino čita s našeg potentionmetara našoj varijabli potValue potValue = arduino.analogRead (potPinNumber);  

Sada kada se naša varijabla potValue ažurira na svakom kadru, u Reality Inspectoru možemo vidjeti da je stvarna u stvarnom vremenu. Prije nego što ga testiramo, sada bi bilo dobro vrijeme da provjerimo da Uniduino utikač sluša na desnom ulazu. Kliknite Uniduino u Heirarchy i provjerite je li Port Port u Inspektoru. Ako je prazan, unesite točan broj priključka za svoj Arduino. U ovom slučaju to je bio COM4, ​​iako se možda razlikuje za vas. Provjerite koristeći Arduino IDE ako niste sigurni.

Odaberite svoju sferu u hijerarhiji i kliknite gumb Reproduciraj na vrhu zaslona. Sustav treba nekoliko sekundi da se inicijalizira, nakon čega biste trebali pokrenuti promjenu Pot vrijednosti u inspektoru prilikom pomicanja potenciometra.

Sad razgovaramo! Pa, strogo govoreći Jedinstvo i Arduino razgovaraju, ali tko broji? Ako ste stigli do sada i ne vidite promjene vrijednosti u inspektoru, provjerite korake postavljanja i provjerite je li odabran ispravan ulaz za vaš Arduino.

Pomaknimo ovu sferu

Sada kada imamo promjenu potValue koja se ažurira, želimo koristiti ovu vrijednost za pomicanje naše sfere. Kad je potenciometar skroz lijevo, želimo da sfera bude s lijeve strane ekrana i obrnuto. Objekti u jedinstvu smješteni su u točki vektorskog prostora, određenoj vrijednostima transformacije. Na slici ispod, gdje je sfera na najudaljenijoj točki s lijeve strane koju bismo željeli, možete vidjeti da je njen vektor položaja 9,5, -4, 0.

Želimo utjecati na položaj X sfere. Nažalost izravno korištenje vrijednosti našeg potenciometra neće uspjeti, jer kada je potenciometar skroz lijevo, on daje vrijednost 0 - što bi našu sferu postavilo desno u sredinu zaslona. S druge krajnosti, najveća vrijednost potenciometra, 1023, smjestila bi kocku desno od našeg zaslona. Nije korisno. Ono što ovdje trebamo je matematika.

Zašto matematiku kad jedinstvo učini to umjesto vas?

Za one od vas grozničavo zureći u komad papira pokriven besmislenim brojevima (iako postoje neke sjajne web stranice. 20 web stranica koje morate naučiti matematiku korak po korak 20 web stranica koje morate naučiti matematiku korak po korak sastavili smo najbolja web mjesta za svaku razinu tako da možete sustavno učiti, steći bolje znanje matematike jednu po jednu i zabaviti se! koje vam mogu pomoći u učenju matematike), ne bojte se. Potreban nam je način da se naše potenciometrske vrijednosti podudaraju s X položajem naše sfere. Srećom, možemo upotrijebiti an Proširenje metoda.

Metoda proširenja je skripta koja za nas obavlja određeni posao. U ovom slučaju, dajemo mu vrijednosti koje imamo, a ona ih vraća preslikana jedna na drugu, spremne za upotrebu u našem sphereMover skripta. Na vrhu ploče Projekt kliknite Stvori> C # skriptu i imenovati ga ExtensionMethods. U skriptu unesite donji kôd:

korištenje UnityEngine; pomoću System.Collections; javna statička klasa ExtensionMethods // naš zgodan dandy Remapper funkcija javna statička float Remap (ova float vrijednost, float from1, float to1, float from2, float to2) return (value - from1) / (to1 - from1) * (to2 - od2) + od2; 

Spremite skriptu i vratite se na svoju sferuMover skripte. Sada možemo koristiti ovu Remap funkciju u našoj skripti ExtensionMethods u našoj Ažuriranoj funkciji za pretvaranje vrijednosti potenciometra u korisne vrijednosti u našoj igri. Pod mjesto gdje smo upravo dodijelili varijablu potValue upišite sljedeće:

Odmah nam pokazuje da naš Remap uzima dva skupa vrijednosti From i To te ih preslikava zajedno. U to možemo unijeti svoje vrijednosti.

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

Spremite svoju skriptu, vratite se u uređivač Unity i pritisnite gumb za reprodukciju. Sada biste trebali vidjeti da se varijabla Mapped Pot mijenja kad pomičete potenciometar, tako da odgovara vrijednostima koje smo odredili za naš Lijevi i Desni rub. Odvojite malo vremena i zahvalite se svojoj skripti ExtensionMethods. Nije kalkulator na vidiku.

Napomena: ako primjećujete da su vaše vrijednosti obrnute, pa kad vam je potenciometar skroz desno, dobivate negativnu vrijednost za varijablu Mapped Pot, možda ćete svoj potenciometar postaviti pogrešno. Srećom, to možete popraviti bez ponovnog ožičenja. Vrijednosti možete jednostavno prebaciti kad ih ponovno postavite:

Sada napokon imamo korisne vrijednosti. Sada preostaje samo dodijeliti te vrijednosti X položaju naše sfere:

// Dodijelite mapiranu vrijednost lonca s x položaju transformacije.pozicija = novi Vector3 (mappedPot, transform.position.y, transform.position.z);

Spremite svoju skriptu, vratite se u uređivač Unity i pritisnite reprodukciju. Sada biste trebali biti u mogućnosti pomicati svoju Sferu ulijevo i udesno pomoću potenciometra!

Postavljanje gumba za rad

Sad kad se naša sfera kreće, zar ne bi bilo lijepo imati način da malo usporimo stvari kad se uskočimo? Pomoću gumba usporit ćemo vrijeme u našoj igri. Otvorite skriptu sfereMover i dodajte ovaj kôd svojoj funkciji Ažuriranje

// ako Unity otkrije da se gumb pritiska, vremenska skala usporava ako (arduino.digitalRead (buttonPinNumber) == 1) Time.timeScale = 0.4f;  else Time.timeScale = 1.0f;

Sada imamo mehaniku naše igre, dodajmo neke prepreke! Koristit ćemo prirodnog neprijatelja sfere, kocku. U hijerarhiji kliknite Stvorite> 3d objekt> Kocka. U kocku inspektor, Dodajte komponentu> Fizika> Kruta tijela. Podesite vrijednost povlačenja krutog tijela na 5. Također, ispod komponente Box Collider u inspektoru odaberite Is Trigger. To će nam omogućiti otkrivanje sudara s našom Sferom.

Na kocku stvorite skriptu i nazovite je collideWithSphere, otvorite skriptu i izbrišite funkcije Start i Update jer nam ovaj put neće trebati. Unesite ovaj kod:

korištenje UnityEngine; pomoću System.Collections; sudara javne klaseWithSphere: MonoBehaviour void OnTriggerEnter (Collider ostalo) Uništi (other.gameObject); 

OnTriggerEnter šalje poruku svaki put kad okidač okidača pogodi drugi sudarač. U ovom slučaju, mi mu govorimo da uništi sve što dotakne. Spremite skriptu i vratite se natrag u uređivač Unity. Povucite kocku iz hijerarhije na ploču Projekta. Primjetit ćete da je tekst kocke u hijerarhiji pocrnio. To je zato što smo stvorili prefab i spremili ga u svoj projekt. Izbrišite svoju kocku iz hijerarhije sada.

Sada nam treba samo skripta za drijemanje kockica. U hijerarhiji kliknite Stvori> Stvori prazno, i preimenujte ga u Upravitelj igara u Inspektoru i dodajte skriptu zvanoj gameManager. Otvorite skriptu i dodajte ovaj kôd:

korištenje UnityEngine; pomoću System.Collections; javna klasa gameManager: MonoBehaviour // varijabla za držanje prefab-a kojeg želimo mrijestiti javnu GameObject kocku; // želimo da neke varijable odluče kako će se svaka kocka mrijesti // i koliko visoko iznad nas želimo da oni rađaju javni int brojToSpwan; javni plovak najnižiSpawnheight; javna plovna najviša širina; // Koristi ovo za inicijalizaciju void Start () for (int i = 0; i < numberToSpwan; i++)  Instantiate(cube, new Vector3(Random.Range(-9, 9), Random.Range(lowestSpawnheight, highestSpawnheight), 0), Quaternion.identity);   // Update is called once per frame void Update ()   

Spremite skriptu. Povratak u uređivač, odaberite Upravitelj igara u hijerarhiji i povucite kocku prefab s projektne ploče na varijablu Kocka u Inspektoru. Ovdje također unesite vrijednosti za svoj mrijest. Možete se boriti s njim kako biste bili što tvrđi ili jednostavniji koliko želite. Imajte na umu da je vrijedno da se vaši najniži kockici rađaju dovoljno visoko da bi se Uniduino mogao inicijalizirati - gubitak igre prije nego što se uspijete kretati može biti frustrirajuće.!

Gotov projekt

Sada kada pritisnete play, kocke će se raštrkati iznad vas i pasti. Možete koristiti svoj potenciometar za izbjegavanje istih i gumb za usporavanje vremena.

U ovom smo projektu stvorili prilagođeni kontroler s Arduinom, konfigurirali Unity i Uniduino za komunikaciju s njim i kreirali jednostavnu igru ​​za testiranje. Koncepti ovdje se mogu primijeniti na gotovo bilo kojem projektu, a postoje čak i zastoji za igre koji su specijalizirani za prilagođene kontrolere.

Pomoću Arduinoa i Unitya mogli biste stvoriti prilagođeni kontroler iz gotovo svega. Jeste li stvorili hi-fi koji upravlja svemirskim brodom? Toster koji kontrolira igru ​​na platformi?

Ako ste napravili takav projekt, volio bih ga vidjeti! Objavite u komentarima ispod!




Još ne komentari

O modernoj tehnologiji, jednostavnoj i pristupačnoj.
Vaš vodič u svijetu moderne tehnologije. Naučite kako koristiti tehnologije i uređaje koji nas okružuju svaki dan i naučite kako otkriti zanimljivosti na Internetu.