Obsah:

Ako vytvoriť hru pre viacerých hráčov s ovládačmi Arduino: 6 krokov
Ako vytvoriť hru pre viacerých hráčov s ovládačmi Arduino: 6 krokov

Video: Ako vytvoriť hru pre viacerých hráčov s ovládačmi Arduino: 6 krokov

Video: Ako vytvoriť hru pre viacerých hráčov s ovládačmi Arduino: 6 krokov
Video: Высокая плотность 2022 2024, Júl
Anonim
Ako vytvoriť hru pre viacerých hráčov s ovládačmi Arduino
Ako vytvoriť hru pre viacerých hráčov s ovládačmi Arduino

Zamysleli ste sa niekedy nad tým, ako vývojári hier vytvárajú úžasné hry, ktoré si ľudia na celom svete užívajú? Dnes vám o tom dám len malú nápovedu tým, že vytvorím malú hru pre viacerých hráčov, ktorá bude ovládaná buď ovládačom Arduino, ktorý tiež vyrobíte. Začnime teda.

Zásoby

Budete potrebovať:

  • Laptop
  • Unity Engine
  • ID C#, ktoré funguje s nástrojom Unity, napríklad Visual Studio alebo Atom. (Budem používať kód Visual Studio)
  • 2 x Arduino Nano
  • 2X Veľká chlebová doska
  • 2x malá doska na chlieb
  • 4X prepínací spínač (tlačidlo)
  • Rezistor 4X 200Ω
  • 12X prepojovacie vodiče medzi mužom a mužom
  • Arduino IDE

Bude to užitočné, ak máte základné znalosti o používaní Unity, ale nebude to mať vplyv na váš postup, pretože sa s ním zoznámite počas vytvárania hry.

Odkaz na stiahnutie Unity Engine:

store.unity.com/download-nuo

Odkaz na stiahnutie IDE kódu Visual Studio:

code.visualstudio.com/download

Odkaz na stiahnutie Arduino IDE:

www.arduino.cc/en/Main/Software

Krok 1: Nastavte okraje hry

Nastavte okraje hry
Nastavte okraje hry
Nastavte okraje hry
Nastavte okraje hry
Nastavte okraje hry
Nastavte okraje hry

V prvom rade si musíte stiahnuť jednotu

Akonáhle to urobíte, môžete začať nastavovať zobrazenie svojej hry.

Otvorte nový projekt Unity, pomenujte ho a vyberte 2D hru.

Keď sa projekt otvorí, všimnite si, že existujú 3 hlavné sekcie s názvom

  • Hierarchia (tu budú pridané všetky vaše herné objekty a detaily).
  • Scéna (kde si nastavíte pohľad na hru).
  • Hra (kde si môžete vyskúšať, ako bude vyzerať skutočná hra).

Všimnite si, že v hierarchii je vaša scéna a pod scénou je „hlavná kamera“. Keď vyberiete kameru z hierarchie, bude vybraná v scéne

(Všetko, čo je v medziach tejto kamery, sa ukáže v skutočnej hre).

Pozrite sa na obrázok 1

Naša hra sa skladá z dvoch dosiek, lopty, ktorá sa pohybuje okolo, a hraníc, ktoré obmedzujú pohyb dosiek a lopty.

Začnime vytvorením hraníc.

  1. Ak chcete vytvoriť nový herný objekt, vyberte položku Aktíva> Vytvoriť> Skřítci> štvorec (pomenujte ho „pravé a ľavé ohraničenie“) Pozrite sa na obrázok 2
  2. Presuňte a pustite pravé a ľavé okraje do hierarchie a v scéne sa zobrazí štvorec.
  3. Upravte polohu jeho osi x na (5) „pravý a ľavý okraj“> inšpektor> transformácia> poloha> X. Pozrite sa na obrázok 3
  4. Potom upravte mierku tak, aby bola taká veľká, aby zakrývala okraje fotoaparátu (pretiahnutím hornej a dolnej strany štvorca ho roztiahnete).
  5. Upravte jeho farbu „z pravého a ľavého okraja“> inšpektor> vykreslenie sprite> farba. Pozrite sa na obrázok 3
  6. Posuňte sa nadol v inšpektorovi, vyberte položku Pridať komponent, potom napíšte Rigidbody2D a stlačte kláves Enter. Tým sa v zásade pridá fyzika k vášmu hernému objektu, pretože mu dodá hmotnosť, gravitáciu a detekciu kolízií. V našej hre však nepotrebujeme gravitáciu, takže namiesto toho urobte gravitáciu 0. Budete tiež musieť zmraziť polohu a rotáciu, aby sa hranica pri kolízii nepohybovala. Pozrite sa na obrázok 4
  7. zvoľte pridať komponent, potom napíšte Box Collider 2D a stlačte Enter. Tým sa okolo objektu hry pridá oblasť, kde je možné detekovať kolízie. Pozrite sa na obrázok 4
  8. Teraz vyberte pravé a ľavé ohraničenie a stlačením (ctrl+d) ho duplikujte.
  9. Premenujte ho na „ľavý okraj“a premenujte prvý („pravý okraj“).
  10. Vyberte ľavý okraj a rovnakým spôsobom v kroku 3 upravte polohu jeho osi x (-5). Teraz máte pravé a ľavé ohraničenie.

Zopakujte predchádzajúcich 10 krokov s okrajmi hore a dole a zmeňte pozíciu y štvorca namiesto polohy x. Konečný náhľad by mal byť niečo podobné ako na obrázku.

Pozrite sa na obrázok 5

Krok 2: Pridanie dosiek a výroba ovládačov

Pridanie dosiek a výroba ovládačov
Pridanie dosiek a výroba ovládačov
Pridanie dosiek a výroba ovládačov
Pridanie dosiek a výroba ovládačov
Pridanie dosiek a výroba ovládačov
Pridanie dosiek a výroba ovládačov

Pridávanie dosiek

Vytvorte nový herný predmet a pomenujte ho hráč 1.

Upraviť:

  • Mierka: X (1,2), Y (0,15), Z (1)
  • Pozícia: X (0), Y (-3,6), z (0)
  • Pridajte BoxCollider2D
  • Pridajte Rigidbody 2D a zmrazte os y a z.

Duplikujte (ctrl+d) a premenujte prehrávač kópií 2.

Upraviť:

  • Mierka: X (1,2), Y (0,15), Z (1)
  • Pozícia: X (0), Y (3,6), z (0)
  • BoxCollider tam už bude.
  • Rigidbody 2D už tam bude a osi y a z už budú zmrazené.

Pozrite sa na obrázok 1

Výroba ovládačov

Budete potrebovať:

  • 2 x Arduino Nano
  • 2X Veľká chlebová doska
  • 2x malá doska na chlieb
  • 4X prepínací spínač (tlačidlo)
  • 4X odpor
  • 12X prepojovacie vodiče medzi mužom a mužom

Teraz sa pozrite na fotografie a mapy chlebov a zostavte joysticky.

  1. Pripojte jeden čip Arduino Nano malou doskou na chlieb.
  2. pripevnite 2 prepínače na veľkej doske na chlieb, ako je to znázornené na obrázku. Pokúste sa udržať pravú stranu dosky na chlieb symetrickú k ľavej, pretože tým bude joystick vyzerať lepšie (ako symetriu môžete použiť 30. stĺpec riadok)
  3. Pripojte ľavý horný kolík ľavého tlačidla k 5V kolíku v Arduine na malej doske na chlieb (veci, ktoré sú prepojené s rovnakým stĺpcom v doske, sú navzájom prepojené).
  4. Pripojte pravý horný kolík pravého tlačidla k 5V kolíku v Arduine.
  5. Pomocou rezistora spojte pravý dolný kolík ľavého tlačidla s bodom na 31. stĺpci.
  6. Pripojte dolný ľavý kolík pravého tlačidla k bodu v 29. stĺpci pomocou rezistora.
  7. Pripojte odpory pomocou kolíka GND v Arduine.
  8. Spojte pravý horný kolík ľavého tlačidla s kolíkom D3 v Arduine.
  9. Spojte ľavý horný kolík pravého tlačidla s kolíkom D9 v Arduine.
  10. Teraz zopakujte tieto kroky a vytvorte druhý ovládač.

Krok 3: Pripojenie Arduina k sériovému portu

Pripojenie Arduina k sériovému portu
Pripojenie Arduina k sériovému portu
Pripojenie Arduina k sériovému portu
Pripojenie Arduina k sériovému portu
Pripojenie Arduina k sériovému portu
Pripojenie Arduina k sériovému portu
Pripojenie Arduina k sériovému portu
Pripojenie Arduina k sériovému portu

Najprv budete musieť nainštalovať Arduino IDE.

Akonáhle sú nainštalované, môžete začať tým, že vytvoríte program Arduino, ktorý prijíma vstupy z tlačidiel a ukladá ich do sériového portu (port COM). Keď je doska Arduino pripojená k vášmu notebooku, operačný systém automaticky rozpozná dosku ako sériový port, do ktorého je možné nahrať programy. Hodnoty uložené v sériovom porte je možné použiť v nasledujúcom kroku, keď prepojíme Unity Engine so sériovým portom.

Teraz spojme Arduino so sériovým portom.

Pozrieť sa na obrázky

  1. Pripojte Arduino k svojmu prenosnému počítaču
  2. Nástroje> Doska> Arduino Nano
  3. Ak je váš čip Arduino aktuálny (2018-2020) Nástroje> Procesor> ATmega328P (starý bootloader).
  4. Ak váš čip Arduino nie je aktuálny (pred rokom 2018) Nástroje> Procesor> ATmega328P
  5. Nástroje> Port> COM (akékoľvek číslo sa zobrazí, v mojom prípade je 10). * Toto je sériový port, kde budú uložené hodnoty.
  6. Skopírujte kód a vložte ho do Arduino IDE a stlačením ctrl+u nahrajte program.
  7. Opakujte s druhým Arduinom. (pri kroku 5 nezabudnite zvoliť iný port COM, aby oba ovládače neboli pripojené k rovnakému sériovému portu).

Kód:

neplatné nastavenie () {

Serial.begin (9600); pinMode (3, VSTUP); // Oznámenie Arduinu, aby prijal vstup z pinu D3 pinMode (9, INPUT); // Povedanie Arduinu, aby prijal vstup z pinu D9} void loop () {if (digitalRead (3) == 1) { /* Ak Arduino prijme vstup 1 Serial.write (1); z pinu 3 Vyveďte hodnotu 1 na sériový port Serial.flush (); */ oneskorenie (2); } if (digitalRead (9) == 1) { /* Ak Arduino prijme vstup 1 Serial.write (2); z pinu 9 Výstup hodnoty 2 na sériový port Serial.flush (); */ oneskorenie (2); }}

Vysvetlenie programu:

Tento kód jednoducho preberá vstup z pinu D3 a pinu D9 v Arduine, ktoré sú pripojené k tlačidlám. Tlačidlá sú buď stlačené alebo nestlačené, čo znamená, že namerané hodnoty sú buď 1 (stlačené) alebo 0 (nestlačené). Ak je vstup z pravého tlačidla (z D9) 1 (stlačený), uložte hodnotu 1 do sériového portu. Ak je vstup z ľavého tlačidla (z D3) 1 (stlačený), uložte do sériového portu hodnotu 2.

Krok 4: Pripojenie jednotky k sériovému portu

Prepojenie jednotky so sériovým portom
Prepojenie jednotky so sériovým portom
Prepojenie jednotky so sériovým portom
Prepojenie jednotky so sériovým portom

V tomto kroku ideme identifikovať sériový port v Unity, aby mohol prijímať vstupy z Arduina po stlačení tlačidiel. Nainštalujte si na svoj notebook Visual Studio Code. Potom prejdite na položku Jednota, v hierarchii vyberte hráča 1, posuňte sa nadol, vyberte položku Pridať komponent a zadajte príkaz player1_motion a potom stlačte kláves Enter. Pozrite sa na obrázok 1

V inšpektorovi sa vytvorí skript C#, kliknite naň pravým tlačidlom myši a vyberte príkaz Upraviť skript, otvorí sa kód vizuálneho štúdia a zobrazí predvolený kód, ktorý vyzerá ako na obrázku 2.

Skopírujte nasledujúci kód a potom zmeňte „SerialPort sp = new SerialPort (" COM10 ", 9600);" so SerialPort sp = nový SerialPort („port COM, ku ktorému je pripojené vaše Arduino“, 9600); nájdete ho tak, že sa vrátite k svojmu kódu Arduino a vyberiete Nástroje> Port> COM (akékoľvek číslo sa zobrazí).

Kód:

pomocou System. Collections;

pomocou System. Collections. Generic; pomocou UnityEngine; pomocou System. IO. Ports; hráč verejnej triedy1_motion: MonoBehaviour {float speed = 8; súkromný pohyblivý pohyb množstva; SerialPort sp = nový SerialPort ("COM10", 9600); // Spustenie sa volá pred aktualizáciou prvého rámca, neplatí Start () {sp. Open (); sp. ReadTimeout = 1; } // Aktualizácia sa volá raz za snímku prázdna Update () {amounttomove = speed*0,01f; if (sp. IsOpen) {try {moveObject (sp. ReadByte ()); print (sp. ReadByte ()); } catch (System. Exception) {}}} void moveObject (int Direction) {if (Direction == 1) {transform. Translate (Vector3.left*amounttomove, Space. World); } if (Direction == 2) {transform. Translate (Vector3.right*amounttomove, Space. World); }}}

Vysvetlenie kódu:

Tento kód hovorí jednote, aby prijímala vstupy zo sériového portu (COM 10). Po stlačení ľavého tlačidla Arduino odošle hodnotu 1 na sériový port, ak jednota prijme 1 zo sériového portu, k hernému objektu „hráč 1“sa v ľavom smere pridá rýchlosť. Po stlačení pravého tlačidla Arduino odošle hodnotu 2 na sériový port, ak jednota prijme 2 zo sériového portu, k hernému objektu „hráč 1“sa pridá rýchlosť správnym smerom. ak sériový port nedostane hodnotu zo sériového portu, nepridá sa žiadna rýchlosť v oboch smeroch, doska zostane nehybná.

Po skopírovaní kódu ho vytvorte a spustite stlačením klávesu F5. Vráťte sa k jednote a stlačte tlačidlo prehrávania. Hráč 1 by sa mal pohybovať doprava, keď stlačíte doprava, a vľavo, keď stlačíte doľava.

Teraz urobte rovnaké kroky znova, ale s prehrávačom 2 a uistite sa, že namiesto „player1_motion“napíšete „Pridať komponent“player2_motion a identifikujete druhý port COM, ku ktorému je pripojený druhý radič, nie rovnaký sériový port.

V samotnom kóde budete tiež musieť zmeniť „public class player1_motion: MonoBehaviour“na „public class player2_motion: MonoBehaviour“.

Krok 5: Pridanie lopty

Pridanie lopty
Pridanie lopty
Pridanie lopty
Pridanie lopty
Pridanie lopty
Pridanie lopty
  1. Pridajte nový herný objekt, ale tentoraz zvoľte namiesto štvorca kruh.
  2. Premenujte ho na „guľa“.
  3. Presuňte myšou v hierarchii.
  4. Upravte mierku (X: 0,2 - Y: 0,2 - Z: 0,2).
  5. Pridajte Rigidbody 2D a zmrazte iba os Z.
  6. Zmeňte hmotnosť na 0,0001
  7. Zmeňte gravitačnú stupnicu na 0.
  8. Pridajte Box Collider 2D.
  9. Prejdite na Aktíva> Vytvoriť> Fyzikálny materiál 2D Pozrite sa na obrázok 1
  10. zmeniť jeho názov na „odraziť“
  11. Zmeňte trenie na nulu od inšpektora
  12. Zmeňte odskočenie na 1 od inšpektora
  13. Presuňte „odraz“do systému Rigidbody 2D> Materiál Pozrite sa na obrázok 2
  14. Z hierarchie znova vyberte „loptu“a prejdite na pridanie komponentu, zadajte príkaz Ball_movement a potom stlačte kláves Enter.
  15. Pravým tlačidlom myši kliknite na skript a vyberte položku Upraviť skript.
  16. Skopírujte nižšie uvedený kód a stlačením klávesu F5 ho vytvorte a spustite.

Kód:

pomocou System. Collections;

pomocou System. Collections. Generic; pomocou UnityEngine; public class Ball_movement: MonoBehaviour {// Štart sa volá pred aktualizáciou prvého rámca private float force = 2; void Start () {StartCoroutine (move ()); } IEnumerator move () {yield return new WaitForSeconds (2); GetComponent (). AddForce (nový Vector2 (1f, 0,5f)*0,02f*sila); }}

Vysvetlenie kódu

Tento kód dáva loptičke rýchlosť v oboch smeroch v smere X a v smere Y s rovnakou veľkosťou, vďaka ktorej sa lopta pohybuje v uhle 45 °. V kroku 8 sme do lopty pridali fyzikálny materiál a zmenili sme jej švih, čo udržuje pohyb lopty mimo hry.

Krok 6: Dokončenie hry

Dokončenie hry
Dokončenie hry
Dokončenie hry
Dokončenie hry
Dokončenie hry
Dokončenie hry
Dokončenie hry
Dokončenie hry

Teraz musíme umožniť prehru. Ak spustíte hru, všimnete si, že keď loptička prejde hráčom 1 alebo hráčom 2, odrazí sa od hranice a to nie je presne to, čo v našej hre potrebujeme. Namiesto toho chceme vytvoriť počítadlo skóre, ktoré počíta skóre vždy, keď sa lopta zrazí s horným alebo dolným okrajom, a vynuluje pozíciu lopty.

  1. Presuňte loptu z hierarchie do projektu. Vyrobili ste si prefabrikáciu lopty, aby ste ju mohli použiť neskôr.
  2. Kliknite pravým tlačidlom myši na hierarchiu a vyberte položku Vytvoriť prázdne. zobrazí sa prázdny predmet, premenujte ho na respawn lopty a zmeňte jeho pozíciu tak, aby bola rovnaká ako pozícia lopty.
  3. Kliknite pravým tlačidlom myši na hierarchiu a vyberte položku UI >> Text. Všimnite si, že text sprevádza plátno, poloha textu v hre závisí od polohy textu na plátne, nie od hraníc našej hry. (Pozrite sa na obrázok 1).
  4. Zmeňte polohu textu na ľubovoľné miesto.
  5. Kroky 3 a 4 zopakujte znova pre skóre druhého hráča.
  6. Zadajte prvý text „Skóre hráča 1: 0“a zadajte druhý text „Skóre hráča 2: 0“. (Pozrite sa na obrázok 2).
  7. Vytvorte skript v hornom okraji s názvom p1wins a skopírujte nasledujúci kód.

Kód:

pomocou System. Collections;

pomocou System. Collections. Generic; pomocou UnityEngine; pomocou UnityEngine. SceneManagement; pomocou UnityEngine. UI; public class p1wins: MonoBehaviour {public Text score; verejná Transformácia ball_respawn; verejná guľa GameObject; private int p1 = 0; // Spustenie sa volá pred neplatnosťou aktualizácie prvého rámca Start () {} // Aktualizácia sa volá raz za neplatný rámec Update () {score.text = "Skóre hráča 1:" + p1; } neplatné OnCollisionEnter2D (Collision2D iné) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p1 ++; Okamžité spustenie (ball, ball_respawn.position, ball_respawn.rotation); }}}

8. Pretiahnite a pustite prefabrikovanú loptu z projektu v kroku 1 do parametra Ball. (Pozrite sa na obrázok 3)

9. Presuňte loptu respawn z hierarchie na parameter Ball-rerspawn. (Pozrite sa na obrázok 3)

10. presuňte skóre hráča 1 z hierarchie do parametra Score. (Pozrite sa na obrázok 3)

Vysvetlenie kódu:

Keď sa loptička zrazí s horným okrajom, zničí sa a znova sa respawnuje v pozícii ball_respawn, ktorú sme priradili v kroku 2. Cieľom urobiť z lopty montovaný kus je dokázať ju respawnovať so všetkými jej vlastnosťami, v opačnom prípade, ak sme loptu použili z hierarchie sa respawnie, ale nepohne sa. Aj keď sa lopta zrazí s horným okrajom, hodnota, ktorá sa pôvodne rovná 0, sa nazýva p1, zvýši sa o 1. Táto hodnota sa zobrazí ako text, takže keď sa loptička zrazí s horným okrajom, skóre pre hráča 1 sa zvýši o 1.

Teraz urobte kroky 7, 8, 9 a 10 pre dolnú hranicu

pre krok 7 vytvorte skript s názvom p2wins a skopírujte namiesto toho nasledujúci kód.

v kroku 10 presuňte skóre hráča 2 z hierarchie do parametra Skóre.

Kód:

pomocou System. Collections;

pomocou System. Collections. Generic; pomocou UnityEngine; pomocou UnityEngine. SceneManagement; pomocou UnityEngine. UI; public class p2wins: MonoBehaviour {public Text score; verejná Transformácia ball_respawn; verejná guľa GameObject; private int p2 = 0; // Spustenie sa volá pred neplatnosťou aktualizácie prvého rámca Start () {} // Aktualizácia sa volá raz za neplatný rámec Update () {score.text = "Skóre hráča 2:" + p2; } neplatné OnCollisionEnter2D (Collision2D iné) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p2 ++; Okamžité spustenie (ball, ball_respawn.position, ball_respawn.rotation); }}}

Odporúča: