Jak si vyrobit vlastní herní ovladač s Arduino a jednotou

  • Peter Holmes
  • 0
  • 4250
  • 396
reklama

Už jste někdy chtěli navrhnout svůj vlastní herní ovladač? Je to snazší, než si myslíte!

V tomto krátkém projektu postavíme jednoduchý vlastní herní ovladač, který bude použit s herním enginem Unity. Tento řadič bude poháněn Arduino Uno, ale můžete použít jednu z mnoha alternativ Průvodce nákupem Arduino: Kterou desku byste měli získat? Průvodce nákupem Arduina: Kterou desku byste měli získat? Je tam tolik různých druhů desek Arduino, bylo by vám odpuštěno, že jste zmatení. Které byste si měli koupit pro svůj projekt? Pomozte nám s tímto nákupním průvodcem Arduino! i pro tento projekt. Vytvoříme také základní hru, kde budete používat svůj ovladač, abyste se vyhnuli padajícím předmětům a zpomalili čas.

Pro tento projekt budete potřebovat

  • Arduino nebo podobný mikrokontrolér
  • 1 x 10 k Ohm rezistor
  • 1 x krátkodobý spínač
  • 1 x potenciometr
  • Zapojené dráty
  • Prkénko
  • Jednotný herní engine
  • Doplněk Uniduino z Unity Asset Store (30 $)
  • Kompletní kód projektu, pokud jej nechcete zapsat (nezahrnuje plugin Uniduino)

Většina z těchto věcí je k dispozici v sadě startérů Arduino. Pokud nemáte startovací sadu, podívejte se do našeho průvodce, jak vybrat nejlepší 4 nejlepší startovací sady pro začátečníky Arduino 4 nejlepší startovací sady pro začátečníky Arduino Existuje spousta skvělých začátečníkových projektů Arduino, které můžete použít, abyste mohli začít, ale budete Nejprve potřebujete Arduino a některé komponenty. Zde je náš výběr 4 z nejlepších startovacích sad pro ... jeden pro vás.

Můžete si udělat ovladač tak složitý, jak si přejete, i když pro tento příklad nastavíme potenciometr a tlačítko - ideální pro ovládání jednoduché arkádové hry.

Sestavení ovladače

Nastavte si prkénko a Arduino podle obrázku níže. To je to, co budeme používat jako náš herní ovladač, i když byste mohli použít téměř úplně stejné nastavení jako DIY midi ovladač Jak si vyrobit MIDI Controller s Arduino Jak si vyrobit MIDI Controller s Arduino Jako hudebník, který nashromáždil Sbírka hudebních nástrojů a hlukových boxů, pokorný Arduino je perfektním nástrojem k vytvoření vlastního MIDI kontroleru. také!

Příprava Arduina

Až budete mít vše zapojeno, připojte Arduino přes USB. V Arduino Software IDE směřujte na Nástroje> Deska a Nástroje> Port vyberte, který mikrokontrolér a port používáte. Arduino IDE je dodáváno s náčrtem, který potřebujeme, a najdete ho pod Soubor> Příklady> Firmata> StandardFirmata. Klikněte na Nahrát a budete připraveni jít.

Pokud jste pro Arduino nová a vaše hlava se mírně topí, podívejte se do našeho průvodce pro začátečníky Začínáme s Arduino: Průvodce pro začátečníky Začínáme s Arduino: Průvodce pro začátečníky Arduino je platforma s otevřeným zdrojovým kódem elektroniky založená na flexibilní, snadno ovladatelné používat hardware a software. Je určen pro umělce, designéry, fandy a kohokoli, kdo má zájem o vytváření interaktivních objektů nebo prostředí. které vám pomohou pěkně mluvit s počítačem.

Nastavení projektu Unity

V jednotě otevřete Okno> Úložiště aktiv pro přístup k Unity's Asset Store z editoru Unity. Vyhledejte v úložišti aktiv plugin Uniduino. Tento plugin vám umožní přijímat a odesílat data do a z vašich pinů Arduino uvnitř Unity. Plugin v době psaní stojí 30 $. Tento projekt je možné provést bez zakoupení pluginu, i když je to poněkud komplikovanější a tento plugin je pro vás všude pohodlnější.

Toto video od tvůrců pluginu vás provede procesem testování všeho, co funguje, a prvním nastavením. Možná budete muset resetovat také Unity editor ve Windows.

Stejný testovací panel můžeme použít k vyzkoušení našeho kontroléru. Nastavte Pin D2 na INPUT a Digital. Dále dolů nastavte Pin A5 na ANALOG. Váš potenciometr a tlačítko by nyní měly zobrazovat hodnoty na obrazovce vedle jejich čísel pinů. Pokrok!

Nyní uděláme něco, co můžeme ovládat

Máme tedy správce, ale co máme ovládat? Možnosti jsou nekonečné, ale pro dnešek vytvoříme velmi jednoduchou uhýbající hru, která otestuje náš nový kontrolní systém. Budeme se pohybovat po nastavení hry poměrně rychle, takže pokud jste zcela novým motorem Unity, můžete najít naši Unity Game Programming Průvodce pro začátečníky Programování hry s jednotou: Průvodce pro začátečníky Programování hry s jednotou: Průvodce pro začátečníky krajina indie vývoje her, Unity se objevil jako něco de-facto standardu: nízké náklady, snadné použití a široká sada funkcí je ideální pro rychlý vývoj her. užitečné získat vaše ložiska.

Postavíme velmi základní hru, ve které je vaším cílem vyhnout se sféře doleva a doprava, abyste se vyhnuli padání kostek, které využijí nově vytvořený vlastní ovladač.

Vytvořte novou scénu a přetáhněte panel Uniduino Aktiva> Uniduino> Montované do vaší hierachy a přetáhněte panel Uniduino do hierarchie. Potřebujeme to, abychom mohli mluvit mezi naší hrou a kontrolérem.

V hierarchii Jednoty klikněte Vytvořit> Koule a pomocí karty Transformace v inspektoru ji přesuňte do dolní části herní obrazovky.

Je čas na kódování

Nyní přidejte na tuto párty nějaký kód. S koulí vybranou v hierarchii klikněte Přidat komponentu> Nový skript ve spodní části okna Inspector. Pojmenuj to sphereMover a vyberte Cis z rozbalovací nabídky. Klikněte na Vytvořit a přidat a skript bude přidán do GameObject. Poklepáním na něj otevřete skript a zadejte tento kód:

pomocí UnityEngine; pomocí System.Collections; pomocí Uniduino; public class sphereMover: MonoBehaviour // Záhlaví nejsou nutně nutně nutná, ale usnadňují život zpět v inspektoru. [Záhlaví ("Arduino proměnné")]] // musíme Arduino prohlásit za proměnnou veřejnou Arduino arduino; // musíme zadat celé číslo pro číslo PIN našeho potenciometru, // zveřejnění těchto proměnných znamená, že je můžeme později změnit v editoru // pokud změníme rozložení našeho arduino public int potPinNumber; // float proměnná, která drží potenciometrovou hodnotu (0 - 1023) public float potValue; // později přemapujeme tuto potValue na pozici y naší kapsle a přidržíme ji v tomto variabilním veřejném float mappedPot; // public int pro náš knoflík pin public int buttonPinNumber; [Záhlaví („proměnné sféry“)] // // proměnné, které drží hodnoty, které jsme si všimli dříve pro strany veřejné obrazovky float leftEdge; public float rightEdge; // Použijte toto pro inicializaci void Start () // a inicializujte my, počínaje Arduino proměnnou. // používáme pouze jeden arduino, takže k jeho chytání můžeme použít Arduino.global. arduino = Arduino.global; arduino.Setup (ConfigurePins);  void ConfigurePins () // nakonfigurujte Arduino pin tak, aby byl analogem pro náš potenciometr arduino.pinMode (potPinNumber, PinMode.ANALOG); // Řekněte Arduinu, aby oznámil všechny změny hodnoty našeho potenciometru arduino.reportAnalog (5, 1); // nakonfigurovat náš Button pin arduino.pinMode (buttonPinNumber, PinMode.INPUT); arduino.reportDigital ((byte) (buttonPinNumber / 8), 1); 

Věnujte chvíli přečtení komentářů k kódu. Zatím jsme prohlásili některé proměnné pro naše Arduino, jeho kolíky a naši sféru. Použili jsme také
Metody Start a ConfigurePins inicializují naše Arduino za běhu. Umožňuje uložit náš skript a vrátit se do editoru Unity a podívat se, co se změnilo.

Nyní můžeme vidět naše veřejné proměnné v okně Inspector. Uvidíme, co můžeme v této fázi vstoupit, abychom nám pomohli později. Víme, jaké špendlíky používáme na Arduino z naší sestavy dříve, můžeme je zadat. Z našeho předchozího experimentu také víme, jak daleko chceme, aby naše koule mohla cestovat doleva a doprava, aby nespadla z obrazovky. Umožňuje nyní zadat tyto hodnoty.

První známky života

Je čas skutečně vidět hodnoty od našeho Arduina uvnitř editoru Unity. Prozatím můžeme do funkce aktualizace skriptu sféry sphereMover přidat jeden řádek kódu a skript znovu uložit.

void Update () // Přiřazujeme hodnotu, kterou arduino čte z našeho potenciometru, do naší proměnné potValue potValue = arduino.analogRead (potPinNumber);  

Nyní, když je naše proměnná potValue aktualizována v každém rámci, můžeme vidět její hodnotu v reálném čase v Unity Inspector. Než provedeme test, nyní by bylo vhodné zkontrolovat, zda zásuvka Uniduino naslouchá na správném portu. V Heirarchii klikněte na Uniduino a v inspektoru zkontrolujte název portu. Pokud je prázdný, zadejte správné číslo portu pro Arduino. V tomto případě se jednalo o COM4, ​​i když to pro vás může být jiné. Pokud si nejste jisti, zkontrolujte použití Arduino IDE.

Vyberte svou sféru v hierarchii a klikněte na tlačítko Přehrát v horní části obrazovky. Systém potřebuje několik sekund k inicializaci, po které byste měli začít sledovat změnu proměnné hodnoty potu v inspektoru, když přesunete potenciometr.

Teď mluvíme! Přísně mluvící jednota a Arduino mluví, ale kdo počítá? Pokud jste se dostali daleko a nevidíte změnu hodnoty v inspektoru, zkontrolujte kroky nastavení a ujistěte se, že máte pro svůj Arduino vybrán správný port..

Pojďme přesunout tuto sféru

Nyní, když máme aktualizovanou proměnnou potValue, chceme tuto hodnotu použít k pohybu naší sféry. Když je potenciometr úplně vlevo, chceme, aby koule byla na levé straně obrazovky a naopak. Objekty v jednotě jsou umístěny v bodě ve Vektorovém prostoru, určeno hodnotami jeho Transform.position. Na obrázku níže, kde je koule v nejvzdálenějším bodě vlevo, bychom ji chtěli, můžete vidět, že její vektor polohy je 9,5, -4, 0.

Chceme ovlivnit pozici X koule. Přímé použití hodnot z našeho potenciometru bohužel nebude fungovat, protože když je potenciometr úplně vlevo, dává hodnotu 0 - což by naši sféru umístilo přímo do středu obrazovky. Na druhém konci by nejvyšší hodnota potenciometru, 1023, umístila krychlovou cestu napravo od naší obrazovky. Neužitečný. To, co zde potřebujeme, je matematika.

Proč to udělá Math, když to Unity udělá za tebe?

Pro ty z vás, kteří se tam obávají, zírající na kus papíru pokrytého nesmyslnými čísly (i když existuje několik skvělých webů, 20 webů, které se musíte naučit matematiku krok za krokem 20 webů, které se musíte naučit matematiku krok za krokem nejlepší weby pro každou úroveň, abyste se mohli systematicky učit, získat lepší přehled o matematice o jednu úroveň najednou a bavit se! to vám může pomoci naučit se matematiku), nebojte se. Potřebujeme způsob, jak zajistit, aby naše potenciometrické hodnoty odpovídaly poloze X naší koule. Naštěstí můžeme použít Metoda rozšíření.

Metoda rozšíření je skript, který pro nás provádí konkrétní úlohu. V tomto případě mu dáme hodnoty, které máme, a vrací je namapované k sobě, připravené k použití v našem sphereMover skript. V horní části panelu Projekt klikněte na Vytvořit> C # skript a pojmenujte ho ExtensionMethods. Do skriptu zadejte níže uvedený kód:

pomocí UnityEngine; pomocí System.Collections; veřejná statická třída ExtensionMethods // naše šikovná dandy Remapper funkce public static float Remap (tato hodnota float, float from1, float to1, float from2, float to2) return (value - from1) / (to1 - from1) * (to2 - od 2) + od 2; 

Uložte skript a vraťte se zpět do skriptu sphereMover. Nyní můžeme tuto funkci Remap použít v našem skriptu ExtensionMethods v naší funkci Update k převodu našich hodnot potenciometru na použitelné hodnoty v naší hře. Do místa, kde jsme právě přiřadili proměnnou potValue, zadejte následující příkaz:

Výzva ukazuje, že náš Remap vezme dvě sady hodnot From a To a mapuje je dohromady. Můžeme do toho zadat naše hodnoty.

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

Uložte skript, vraťte se do editoru Unity a stiskněte tlačítko play. Nyní byste měli vidět, že proměnná Mapped Pot se při pohybu potenciometru mění, aby odpovídala hodnotám, které jsme určili pro naše levý a pravý okraj. Udělejte si chvilku odpočinku a děkujte skriptu ExtensionMethods. Není kalkulačka v dohledu.

Poznámka: Pokud si všimnete, že jsou vaše hodnoty obráceny, takže když je potenciometr zcela vpravo, dostanete zápornou hodnotu pro vaši proměnnou Mapped Pot, možná budete mít potenciometr nastaven nesprávně. Naštěstí to můžete napravit bez nutnosti opětovného zapojení. Když je přemapujete, můžete jednoduše přepnout hodnoty:

Nyní máme konečně použitelné hodnoty. Nyní zbývá jen přiřadit tyto hodnoty k pozici X naší koule:

// Přiřaďte mapovanou hodnotu pot k x pozici koule. Transform.position = new Vector3 (mappedPot, transform.position.y, transform.position.z);

Uložte skript, vraťte se do editoru Unity a stiskněte play. Nyní byste měli být schopni potenciometrem posunout svoji sféru doleva a doprava!

Uvedení tlačítka do práce

Teď, když se naše koule pohybuje, nebylo by hezké mít způsob, jak věci trochu zpomalit, když se dostaneme na těsné místo? Použijeme naše tlačítko ke zpomalení času v naší hře. Otevřete skript sphereMover a přidejte tento kód do své funkce aktualizace

// pokud Unity detekuje stisknutí tlačítka, časová stupnice se zpomalí, pokud (arduino.digitalRead (buttonPinNumber) == 1) Time.timeScale = 0.4f;  else Time.timeScale = 1.0f;

Nyní máme mechaniku naší hry, přidejte nějaké překážky! Budeme používat přirozeného nepřítele koule, krychle. V hierarchii klikněte na Vytvořit> 3D objekt> Kostka. V inspektoru krychle, Přidat komponentu> Fyzika> Pevný objekt. Nastavte hodnotu přetažení rigidbody na 5. Také v komponentě Box Collider v inspektoru vyberte Is Trigger. To nám umožní odhalit kolize s naší koulí.

Vytvořte skript na krychli a zavolejte collideWithSphere, otevřete skript a odstraňte funkce Start a Update, protože tentokrát je nebudeme potřebovat. Zadejte tento kód:

pomocí UnityEngine; pomocí System.Collections; public class collideWithSphere: MonoBehaviour void OnTriggerEnter (Collider other) Destroy (other.gameObject); 

OnTriggerEnter odešle zprávu vždy, když spouštěcí srážka zasáhne jiného srážce. V tomto případě to říkáme, aby zničilo vše, čeho se dotkne. Uložte skript a vraťte se zpět do editoru Unity. Přetáhněte krychli z hierarchie na panel Projekt. Všimněte si, že se text krychle v hierarchii změnil na modrý. Důvodem je, že jsme vytvořili montovanou desku a uložili ji do našeho projektu. Odstraňte svou krychli z hierarchie.

Vše, co nyní potřebujeme, je skript, který vynoří kostky. V hierarchii klikněte Vytvořit> Vytvořit prázdné, a přejmenujte jej na Game Manager v Inspektoru a přidejte do něj skript s názvem gameManager. Otevřete skript a přidejte tento kód:

pomocí UnityEngine; pomocí System.Collections; public class gameManager: MonoBehaviour // proměnná, která drží panelák, který chceme vytvořit veřejnou kostku GameObject; // chceme, aby se některé proměnné rozhodly o tom, jak se nějaké kostky rozmnoží // a jak vysoko nad námi chceme, aby vytvořily veřejné int numberToSpwan; public float nejnižšíSpawnheight; public float highSpawnheight; // Použijte pro inicializaci 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 ()   

Uložte skript. Zpět v editoru vyberte Správce her v hierarchii a přetáhněte předvolbu krychle z panelu projektu do proměnné Cube v inspektoru. Vyplňte zde také hodnoty pro vaši reprodukci. Můžete se s ním pohrávat, aby byl stejně těžký nebo snadný, jak chcete. Mějte na paměti, že stojí za to, aby se vaše nejnižší kostky rozmnožily dostatečně vysoko, aby umožnily inicializaci Uniduina - prohrát hru dříve, než se budete moci pohybovat, může být frustrující!

Dokončený projekt

Když nyní stisknete tlačítko play, kostky se vynoří nad vámi a padnou. Pomocí potenciometru se jim můžete vyhnout a tlačítkem zpomalit čas.

V tomto projektu jsme vytvořili vlastní ovladač s Arduino, nakonfigurovali Unity a Uniduino, aby s ním komunikovali, a vytvořili jsme jednoduchou hru, která ho otestuje. Pojmy zde lze aplikovat téměř na jakýkoli projekt a existují dokonce i herní zácpy, které se specializují na vlastní ovladače.

S Arduino a Unity můžete vytvořit vlastní ovladač z téměř všeho. Vytvořili jste hi-fi, které řídí kosmickou loď? Toustovač, který ovládá plošinovou hru?

Pokud jste vytvořili projekt, jako je tento, ráda bych ho viděla! Zveřejněte to v komentářích níže!




Bisher hat noch niemand einen Kommentar zu diesem Artikel abgegeben.

O moderní technologii, jednoduché a cenově dostupné.
Váš průvodce ve světě moderních technologií. Naučte se, jak používat technologie a pomůcky, které nás každý den obklopují, a naučte se, jak objevovat na internetu zajímavé věci.