Obsah:

Herní ovladač Arduino se světly reagujícími na vaši hru Unity :: 24 kroků
Herní ovladač Arduino se světly reagujícími na vaši hru Unity :: 24 kroků

Video: Herní ovladač Arduino se světly reagujícími na vaši hru Unity :: 24 kroků

Video: Herní ovladač Arduino se světly reagujícími na vaši hru Unity :: 24 kroků
Video: LED RGB pásek – Osvětlení za televizi 2024, Listopad
Anonim
Herní ovladač Arduino se světly reagujícími na vaši hru Unity
Herní ovladač Arduino se světly reagujícími na vaši hru Unity

Nejprve jsem to napsal ve Wordu. Toto je poprvé, co používám instructable, takže kdykoli řeknu: napište kód tak, abyste věděli, že odkazuji na obrázek v horní části tohoto kroku.

V tomto projektu používám 2 arduino's ke spuštění 2 samostatných bitů kódu, protože jsem měl nějaké potíže s jeho fungováním pouze s jedním

Toto jsou Uno a Leonardo

Celkově je to to, co budete potřebovat k propojení tohoto projektu.

· 7 tlačítek

· 23 propojovacích vodičů

· 1 arduino Leonardo + USB kabel

· 4 odpory · 4 LED diody

· 1 arduino uno + USB kabel

· 2 prkénka

Krok 1: Připojení ovládacích tlačítek k Arduinu

Zapojení ovládacích tlačítek do Arduina
Zapojení ovládacích tlačítek do Arduina

Co budete potřebovat k připojení této části:

· 7 tlačítek

· 14 propojovacích vodičů

· 1 arduino Leonardo + USB kabel

· Prkénko

Zapojení tlačítek je velmi jednoduché, ale může se rychle stát nepořádkem, který se zobrazí ve formě obrázku.

· První z vás umístíte tlačítka do pozic, které jsem označil na obrázku výše.

· Za druhé, chcete připojit propojku ze zemního otvoru na arduino Leonardo do mínusové řady prkénka.

· Nyní připojíte propojky odkudkoli z mínusové řady do řady, která je v souladu s pravým kolíkem vašeho tlačítka. to mu dodá energii.

· Dále chcete připojit propojovací vodič z řady, která je v souladu s levým kolíkem vašeho tlačítka, do digitálních vstupních slotů Leonarda. Pro tlačítka zde jsem použil slot 2 - 3 - 4 - 5 - 6 - 7- 8

Ukázal jsem pouze drát, který bude na obrázku vstupovat 8, protože se stane velmi chaotickým obrazem, který vám ukáže všechny dráty, které se navzájem kříží.

Krok 2: Kódování Arduina Leonardo:

Kódování Arduina Leonardo
Kódování Arduina Leonardo

Abych vám řekl, proč k tomu používám Leonarda. Je to proto, že má určitý čip, který Uno ne, takže počítač jej rozpozná jako vstupní zařízení USB. Podobně jako klávesnice. Což nám umožňuje udělat něco, co nám život programátorů pro tento projekt sakra hodně usnadní. Emulace klávesnice. Oklameme počítač, aby si myslel, že mačkáme určité klávesy na klávesnici, když ve skutečnosti mačkáme tlačítka na našem ovladači.

Teď půjdu pěšky, myslel jste si kód krok za krokem.

Nejprve úplně nahoře zahrnujeme Keyboard.h. To nám umožní používat funkce klávesnice, které použijeme v našem kódu.

Krok 3:

obraz
obraz

Poté musíme definovat digitální vstupní sloty, které použijeme na

Leonardo pro každé tlačítko.

Také jsem každého z nich pojmenoval podle klíče, který budu napodobovat.

Krok 4:

obraz
obraz

Odtud se dostaneme do funkce nastavení. To říká

arduino, co dělá při spuštění.

nejprve napíšeme Serial.begin, který otevře sériový port a nastaví rychlost přenosu dat na 9600 bps

a definujeme, že všechny jsou pojmenovány piny jako vstupy.

Krok 5:

obraz
obraz

A nakonec napíšeme naši funkci smyčky, která zkontroluje, zda

jsou stisknuta tlačítka a řekněte arduino, jak na to reagovat.

Nejprve napíšeme Keyboard.begin, který Arduinovi řekne, že si na nás musí dávat pozor pomocí funkcí klávesnice

Krok 6:

obraz
obraz
obraz
obraz
obraz
obraz

Potom pro každé tlačítko napíšeme příkaz if/else, který vypadá takto

Zde jsem tedy řekl arduinu: Pokud je na ovladači stisknuto levé tlačítko, přimějte počítač, aby si myslel, že stiskneme klávesu „a“, a pokud tomu tak není, myslete si, že jsme klávesu pustili.

Tento blok kódu v podstatě opakujete pro každé tlačítko na vašem ovladači. se změnami pro každou proměnnou a klíče, které musí proměnná emulovat

Krok 7:

obraz
obraz

Klíče, kterým jsme řekli, aby počítač zasáhl, jsou W - A - S - D

jsou do značné míry standardem pro pohyb v počítačových hrách a E-Q-a mezerník, který je v tomto kódu rozpoznán jako „“, což jsou tlačítka, která používám k vyzvednutí-zrušení a spuštění v mé hře. Nebojte se je změnit na jakékoli klávesy, o kterých si myslíte, že pro vaši hru/ovladač fungují lépe.

Potom nakonec řekneme arduino, aby zastavil kontrolu, která Keyboard.end

Krok 8: Kódování pohybu v jednotě:

Kódování pohybu v jednotě
Kódování pohybu v jednotě

Nejprve mi řekněte, že to dělám pro 2D hru, takže

příklady, které uvidíte, jsou k tomu stavěny. Hlavně to znamená, že kde používám vector2, pokud pracujete ve 3D, budete používat vector3. protože byste se museli starat o další rozměr pohybu ve 3D.

Důvod, proč jsem použil emulaci klávesnice na straně arduina, je ten, že Unity má v sobě něco, co rozpoznává klávesy na klávesnici, které můžeme použít.

Pokud otevřete projekt v jednotě, přejděte na Úpravy -> Nastavení projektu -> Vstup. Ve svém inspektoru můžete vidět, že spouští správce vstupu. Kde když kliknete na Osy, uvidíte celou řadu vstupních jmen, která se běžně používají pro ovladače počítače, jako jsou ty, které nyní vyrábíme. Dva vstupy, které použijeme, jsou horizontální a vertikální, které podle vás správně uhodly W-A-S-D.

Nejprve chcete vytvořit objekt ve své hierarchii scén jednoty, kterou bude váš hráč. V mém případě je to zábavný malý kluk. Může to být cokoli, co potřebujete, aby to bylo, ale pro účely své hry jsem udělal toho chlapa.

Krok 9:

obraz
obraz

Chcete tomuto hráči dát 2 věci. Krabicový urychlovač 2d a

a Rigidbody 2d a upravte je tak, aby byly jako na obrázku výše.

Krok 10:

obraz
obraz

Poté chcete přejít do složky projektů a vytvořit soubor

C# skript. Což jsem pojmenoval PlayerMovement.

V tomto skriptu definujete 2 proměnné. Veřejný plovák, kterému říkám moveSpeed. To určuje, jak rychle jedete. A soukromý Rigidbody2D, kterému říkám RigidPlayer. Který bude hledat pro vaše hráče rigidbody.

Nezapomeňte se dostat do editoru vaší jednoty kliknutím na přehrávač přidejte tento nový skript přetažením na inspektor a nastavte číselnou hodnotu pro moveSpeed.

Krok 11:

obraz
obraz

nyní ve svém Start () chcete udělat jednu věc a to je

ujistěte se, že váš RigidPlayer dokáže najít vašeho plátce rigidbody 2d. To provedete pomocí následujícího řádku kódu:

Krok 12:

obraz
obraz

Poté přejdeme k aktualizaci (). Tady je místo, kam jdeme

aby se hráč pohnul.

děláme to docela jednoduchým příkazem if, který se bude zabývat negativními a pozitivními klíči z horizontálních (AD) a vertikálních (SW) a použijeme to jako číslo, abychom vynutili, že nasadíme naše pevné tělo 2d, abychom zatlačili našeho hráče směr. Toto číslo bude vynásobeno proměnnou moveSpeed.

Krok 13:

obraz
obraz

Nakonec se chcete ujistit, že se váš hráč přestane pohybovat, když

nic nestlačíte. To se vám líbí takto:

Nyní, pokud chcete použít svá 3 další tlačítka pro cokoli, udělejte to pomocí příkazu if: if (Input. GetKeyDown (Keycode. Space))

pro mezerník a místo mezery vložte písmeno ostatních kláves, které jste se rozhodli použít pro ostatní klávesy.

Krok 14: Zapojení světel do Arduina

Zapojení světel do Arduina
Zapojení světel do Arduina

·

Co budete potřebovat k připojení této části:

· 9 propojovacích vodičů

· 4 odpory

· 4 LED diody

· 1 arduino uno + USB kabel

· Prkénko

Připojení světel bude provedeno pomocí Uno.

Nakonec to bude vypadat jako na obrázku výše:

Rezistory připojíte k dlouhé straně LED diod. A pak připojíte propojku z digitálního čísla pinu na uno k rezistorům. v tomto případě jsem použil digitální vývody 9 -10 -11 -12, tato čísla budou relevantní, až se dostaneme ke kódu pro světla.

Odtud chcete připojit propojku ze zemního otvoru na vašem arduino Uno na místo na vaší desce, jak je vidět na černém drátu na obrázku výše.

Pak chcete, aby všechny 4 propojky vedly na kratší konec každé LED

Krok 15: Kódování Arduino Uno

Kódování Arduino Uno
Kódování Arduino Uno

Dobře, nejprve budeme znovu definovat naše proměnné

Nejprve tedy, jaké digitální vstupy pro naše světla používáme. A uděláme znak nazvaný myCol [20]

Krok 16:

obraz
obraz

Potom v nastavení chceme provést Serial.begin znovu. Zapněte všechny naše LED diody na výstup a při spuštění je všechny vypněte.

Krok 17:

obraz
obraz

A nakonec chcete napsat funkci smyčky.

To způsobí, že Arduino načte všechna data přicházející přes sériové číslo, dokud nedojde k jedné ze dvou událostí. Buď je detekován znak podávání řádku; toto je identifikováno lf, které je nastaveno na 10 a je prvním argumentem nebo bylo načteno určité množství bajtů. Toto je třetí argument a pro tento příklad je nastaven pouze na jeden bajt. Data jsou uložena v proměnné myCol, která je nastavena na char a limit 20. V readBytesUtildy je to druhý argument. Nebo jiným způsobem, jak to vysvětlit, je Serial.readBytesUntil (terminatorCharacter, buffer, byteLimit);

A příkazy if zajistí, že se rozsvítí určitá světla, když jednota dá signál. V tomto případě jsem dostal 4 různě barevná světla, takže jednotu odesílám g, aby se rozsvítila zelená LED, b aby se rozsvítila modrá LED, r aby se rozsvítila červená LED a y pro rozsvícení žluté LED.

Krok 18: Strana kódování světel Unity:

Strana kódování světel Unity
Strana kódování světel Unity

Dobře, než se do toho pustíme, nejprve 2 věci.

1. ve vašem kódovacím programu arduino přejděte na Tool -> Port -> a zkontrolujte, na kterém COM je vaše uno. V mém případě je to COM3 (to bude důležité v kódu)

2. v jednotě Přejděte na Upravit -> Nastavení projektu -> Přehrávač a poté v inspektoru klikněte na další nastavení, přejděte na úroveň kompatibility Api a přepněte ji z podsítě. NET 2.0 pouze na. NET 2.0

Dobře, hotovo. Pojďme do toho.

Klikněte pravým tlačítkem na svou hierarchii a klikněte na Vytvořit prázdné.

Toto bude prázdný herní objekt, který bude ve vaší hře existovat a bude obsahovat jeden skript pro nás. Tento objekt jsem nazval Init.

Krok 19:

obraz
obraz

Poté přejděte na kartu projektů a vytvořte nový skript C#

a říkej tomu Odesílání.

První věc, kterou uděláte, je napsat je do řádků v části použití kódu:

pomocí System. IO. Ports;

pomocí System. Threading;

díky tomu můžeme použít proměnnou SerialPort

Krok 20:

obraz
obraz

v tomto skriptu vytvoříme následující proměnné. Nyní si všimněte, že jsem tam dostal COM3, může to být pro vás jiné, jak jsme diskutovali na začátku tohoto kroku. Pokud je nahrazeno číslem 3 číslem, které pro vás uvedlo.

Krok 21:

obraz
obraz

Na začátku řekneme skriptu, který máme použít, OpenConnection

funkce, kterou si za chvíli napíšeme

aktualizace je spíše test než cokoli jiného, ale pokud ji chcete zahrnout, testuje zprávy odesílané do jednoty. Můžete to upřímně ignorovat.

Krok 22:

obraz
obraz

Dobře teď pro tuto funkci OpenConnection. Tohle je prostě velké

if/else prohlášení, které udržuje připojení otevřené, zkopírujte jej jako napsaný a měli byste být v pořádku.

Krok 23:

obraz
obraz

Nyní si zapamatujte z arduino kódu, který jsem zkontroloval

signály, že k tomu pošle jednota.

no a tady se to stává. V mém případě jsem připojil 4 světla, takže jsem napsal 4 funkce, které jsou extrémně jednoduché. Jediné, co dělají, je, že když jim někdo zavolá, pošlou jim dopis arduino. Když arduino dostane toto písmeno, rozsvítí se světlo odpovídající uvedenému písmenu.

Krok 24:

obraz
obraz

Možná si říkáte, jak to mám nazvat

funkce? Uděláte to pomocí jednoho jednoduchého řádku v kterémkoli z vašich dalších skriptů C#, které pro svou hru používáte. Sending. NameFunctionhere ();. Například například v mé hře má hráč za úkol nasbírat 4 barevné koule. Napsal jsem tedy malý skript, který zajistí, že když se přiblíží k jednomu a stiskne správné tlačítko, zvedne ho a vyšle signál arduino, že v tomto případě byla žlutá koule sebrána. Aby to vědělo, musím zapnout žlutou LED:

Tento jeden řádek kódu můžete umístit kamkoli chcete. Pokud chcete, aby se rozsvítila, když hra začíná, vložte ji do funkce spuštění. Chcete, aby se rozsvítilo, když zemře, dejte to do své funkce pro smrt hráčů. Trochu experimentujte. Rozhodl jsem se udělat ze světel jakýsi prvek uživatelského rozhraní mimo hru, abych měl přehled o koulích, které musíte sbírat, aniž byste zaplnili obrazovku.

Doporučuje: