Obsah:
2025 Autor: John Day | [email protected]. Naposledy zmenené: 2025-01-13 06:58
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
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.
- 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
- Presuňte a pustite pravé a ľavé okraje do hierarchie a v scéne sa zobrazí štvorec.
- Upravte polohu jeho osi x na (5) „pravý a ľavý okraj“> inšpektor> transformácia> poloha> X. Pozrite sa na obrázok 3
- Potom upravte mierku tak, aby bola taká veľká, aby zakrývala okraje fotoaparátu (pretiahnutím hornej a dolnej strany štvorca ho roztiahnete).
- Upravte jeho farbu „z pravého a ľavého okraja“> inšpektor> vykreslenie sprite> farba. Pozrite sa na obrázok 3
- 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
- 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
- Teraz vyberte pravé a ľavé ohraničenie a stlačením (ctrl+d) ho duplikujte.
- Premenujte ho na „ľavý okraj“a premenujte prvý („pravý okraj“).
- 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
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.
- Pripojte jeden čip Arduino Nano malou doskou na chlieb.
- 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)
- 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é).
- Pripojte pravý horný kolík pravého tlačidla k 5V kolíku v Arduine.
- Pomocou rezistora spojte pravý dolný kolík ľavého tlačidla s bodom na 31. stĺpci.
- Pripojte dolný ľavý kolík pravého tlačidla k bodu v 29. stĺpci pomocou rezistora.
- Pripojte odpory pomocou kolíka GND v Arduine.
- Spojte pravý horný kolík ľavého tlačidla s kolíkom D3 v Arduine.
- Spojte ľavý horný kolík pravého tlačidla s kolíkom D9 v Arduine.
- Teraz zopakujte tieto kroky a vytvorte druhý ovládač.
Krok 3: 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
- Pripojte Arduino k svojmu prenosnému počítaču
- Nástroje> Doska> Arduino Nano
- Ak je váš čip Arduino aktuálny (2018-2020) Nástroje> Procesor> ATmega328P (starý bootloader).
- Ak váš čip Arduino nie je aktuálny (pred rokom 2018) Nástroje> Procesor> ATmega328P
- 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.
- Skopírujte kód a vložte ho do Arduino IDE a stlačením ctrl+u nahrajte program.
- 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
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
- Pridajte nový herný objekt, ale tentoraz zvoľte namiesto štvorca kruh.
- Premenujte ho na „guľa“.
- Presuňte myšou v hierarchii.
- Upravte mierku (X: 0,2 - Y: 0,2 - Z: 0,2).
- Pridajte Rigidbody 2D a zmrazte iba os Z.
- Zmeňte hmotnosť na 0,0001
- Zmeňte gravitačnú stupnicu na 0.
- Pridajte Box Collider 2D.
- Prejdite na Aktíva> Vytvoriť> Fyzikálny materiál 2D Pozrite sa na obrázok 1
- zmeniť jeho názov na „odraziť“
- Zmeňte trenie na nulu od inšpektora
- Zmeňte odskočenie na 1 od inšpektora
- Presuňte „odraz“do systému Rigidbody 2D> Materiál Pozrite sa na obrázok 2
- Z hierarchie znova vyberte „loptu“a prejdite na pridanie komponentu, zadajte príkaz Ball_movement a potom stlačte kláves Enter.
- Pravým tlačidlom myši kliknite na skript a vyberte položku Upraviť skript.
- 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
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.
- Presuňte loptu z hierarchie do projektu. Vyrobili ste si prefabrikáciu lopty, aby ste ju mohli použiť neskôr.
- 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.
- 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).
- Zmeňte polohu textu na ľubovoľné miesto.
- Kroky 3 a 4 zopakujte znova pre skóre druhého hráča.
- 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).
- 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); }}}