Obsah:

Jak vytvořit hru pro více hráčů pomocí ovladačů Arduino: 6 kroků
Jak vytvořit hru pro více hráčů pomocí ovladačů Arduino: 6 kroků

Video: Jak vytvořit hru pro více hráčů pomocí ovladačů Arduino: 6 kroků

Video: Jak vytvořit hru pro více hráčů pomocí ovladačů Arduino: 6 kroků
Video: Arianka má na oku klíště?! 🐞🥹 Ach joooo! 😩 2024, Červenec
Anonim
Jak vytvořit hru pro více hráčů pomocí ovladačů Arduino
Jak vytvořit hru pro více hráčů pomocí ovladačů Arduino

Přemýšleli jste někdy o tom, jak vývojáři her vytvářejí úžasné hry, které si lidé na celém světě užívají? Dnes vám k tomu dám jen malou nápovědu tím, že vytvořím malou hru pro více hráčů, která bude ovládána buď ovladačem Arduino, který také vytvoříte. Pojďme tedy začít.

Zásoby

Budete potřebovat:

  • Notebook
  • Unity Engine
  • ID C#, které funguje s Unity, jako je Visual Studio nebo Atom. (Budu používat kód Visual Studio)
  • 2X Arduino Nano
  • 2X Big Bread Board
  • 2X Malé pečivo
  • Přepínač 4X (tlačítko)
  • 4x odpor 200 ohmů
  • 12X propojovací vodiče pro muže a muže
  • Arduino IDE

Bude to užitečné, pokud máte základní znalosti o používání Unity, ale nebude to mít vliv na váš postup, protože se s ním seznámíte během vytváření hry.

Odkaz na stažení Unity Engine:

store.unity.com/download-nuo

Odkaz pro stažení IDE Visual Studio Code:

code.visualstudio.com/download

Odkaz pro stažení Arduino IDE:

www.arduino.cc/en/Main/Software

Krok 1: Nastavení hranic hry

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

Nejprve si musíte stáhnout jednotu

Až to budete mít hotové, můžete začít nastavovat zobrazení hry.

Otevřete nový projekt Unity, pojmenujte jej a vyberte 2D hru.

Když se projekt otevře, všimněte si, že existují 3 hlavní sekce s názvem

  • Hierarchie (zde budou přidány všechny vaše herní objekty a detaily).
  • Scéna (kde si nastavíte pohled na hru).
  • Hra (kde si můžete vyzkoušet, jak bude vypadat skutečná hra).

Všimněte si, že v hierarchii je vaše scéna a pod scénou je „hlavní kamera“. Když vyberete kameru z hierarchie, bude vybrána ve scéně

(Cokoli v hranicích této kamery se ukáže ve skutečné hře).

Podívejte se na obrázek 1

Naše hra se skládá ze dvou desek, koule, která se pohybuje kolem, a hranic, které omezují pohyb desek a míče.

Začněme vytvořením hranic.

  1. Chcete -li vytvořit nový herní objekt, vyberte Aktiva> Vytvořit> Skřítci> čtverec (pojmenujte jej „pravé a levé ohraničení“) Podívejte se na obrázek 2
  2. Přetáhněte pravé a levé ohraničení do hierarchie a ve scéně se objeví čtverec.
  3. Upravte polohu jeho osy x na (5) „pravé a levé ohraničení“> inspektor> transformace> poloha> X. Podívejte se na obrázek 3
  4. Poté upravte jeho měřítko tak, aby pokrylo okraje fotoaparátu (přetažením horního a dolního okraje čtverce jej roztáhnete).
  5. Upravte jeho barvu „z pravého a levého okraje“> inspektor> vykreslení spritu> barva. Podívejte se na obrázek 3
  6. Přejděte dolů v inspektoru a vyberte přidat komponentu, poté zadejte Rigidbody2D a stiskněte klávesu Enter, což v podstatě přidá fyziku vašemu hernímu objektu, protože mu dává hmotnost, gravitaci a detekci kolizí. V naší hře však gravitaci nepotřebujeme, takže místo ní vytvořte gravitaci 0. Budete také muset zmrazit polohu a rotaci, aby se ohraničení při srážce nepohybovalo. Podívejte se na obrázek 4
  7. vyberte přidat komponentu, poté zadejte Box Collider 2D a stiskněte Enter. Tím se přidá oblast kolem objektu hry, kde lze detekovat kolize. Podívejte se na obrázek 4
  8. Nyní vyberte pravé a levé ohraničení a stisknutím (ctrl+d) jej duplikujte.
  9. Přejmenujte jej na „levé ohraničení“a přejmenujte první („pravé ohraničení“).
  10. Vyberte levé ohraničení a stejným způsobem upravte jeho polohu osy x na (-5) v kroku 3. Nyní máte pravé a levé ohraničení.

Opakujte předchozích 10 kroků s okraji nahoru a dolů a změňte pozici y čtverce namísto polohy x. Konečný náhled by měl být něco podobného jako na obrázku.

Podívejte se na obrázek 5

Krok 2: Přidání desek a výroba ovladačů

Přidávání desek a vytváření ovladačů
Přidávání desek a vytváření ovladačů
Přidávání desek a vytváření ovladačů
Přidávání desek a vytváření ovladačů
Přidávání desek a vytváření ovladačů
Přidávání desek a vytváření ovladačů

Přidávání desek

Vytvořte nový herní objekt a pojmenujte jej hráč 1.

Upravit:

  • Měřítko: X (1,2), Y (0,15), Z (1)
  • Pozice: X (0), Y (-3,6), z (0)
  • Přidejte BoxCollider2D
  • Přidejte Rigidbody 2D a zmrazte osy y a z.

Duplikujte (ctrl+d) a přejmenujte přehrávač kopií 2.

Upravit:

  • Měřítko: X (1,2), Y (0,15), Z (1)
  • Pozice: X (0), Y (3,6), z (0)
  • BoxCollider už tam bude.
  • Už tu bude Rigidbody 2D a osy y a z již zamrznou.

Podívejte se na obrázek 1

Výroba ovladačů

Budete potřebovat:

  • 2X Arduino Nano
  • 2X Big Bread Board
  • 2X Malé pečivo
  • Přepínač 4X (tlačítko)
  • 4X odpor
  • 12X propojovací vodiče pro muže a muže

Nyní se podívejte na fotografie a mapování chlebových desek a sestavte joysticky.

  1. Připojte jeden čip Arduino Nano pomocí malé desky na chléb.
  2. připojte 2 přepínače na velké desce chleba, jak je znázorněno na obrázku. Zkuste zachovat pravou stranu desky na chleba symetrickou k levé, protože díky tomu bude joystick vypadat lépe (jako symetrii můžete použít 30. sloupec čára)
  3. Propojte levý horní kolík levého tlačítka s 5V kolíkem v Arduinu na malém chlebovém prkénku (věci, které jsou propojeny se stejným sloupcem v prkénku, jsou navzájem propojeny).
  4. Propojte pravý horní kolík pravého tlačítka s 5V kolíkem v Arduinu.
  5. Pomocí rezistoru spojte pravý dolní kolík levého tlačítka s bodem na 31. sloupci.
  6. Pomocí rezistoru spojte levý dolní kolík pravého tlačítka s bodem na 29. sloupci.
  7. Připojte odpory pomocí kolíku GND v Arduinu.
  8. Propojte pravý horní kolík levého tlačítka s kolíkem D3 v Arduinu.
  9. Propojte levý horní kolík pravého tlačítka s kolíkem D9 v Arduinu.
  10. Nyní zopakujte tyto kroky a vytvořte druhý ovladač.

Krok 3: Připojení Arduina k sériovému portu

Připojení Arduina k sériovému portu
Připojení Arduina k sériovému portu
Připojení Arduina k sériovému portu
Připojení Arduina k sériovému portu
Připojení Arduina k sériovému portu
Připojení Arduina k sériovému portu
Připojení Arduina k sériovému portu
Připojení Arduina k sériovému portu

Nejprve budete muset nainstalovat Arduino IDE.

Jakmile jsou nainstalovány, můžete začít vytvořením programu Arduino, který přijímá vstupy z tlačítek a ukládá je do sériového portu (COM port). Když je deska Arduino připojena k vašemu notebooku, operační systém automaticky rozpozná desku jako sériový port, do kterého lze nahrávat programy. Hodnoty uložené v sériovém portu lze použít v dalším kroku, když připojíme Unity Engine k sériovému portu.

Nyní připojíme Arduino k sériovému portu.

Podívat se na obrázky

  1. Připojte Arduino k notebooku
  2. Nástroje> Deska> Arduino Nano
  3. Pokud je váš čip Arduino nejnovější (2018-2020) Nástroje> Procesor> ATmega328P (Old Bootloader).
  4. Pokud váš čip Arduino není aktuální (před rokem 2018) Nástroje> Procesor> ATmega328P
  5. Nástroje> Port> COM (jakékoli číslo se objeví, v mém případě je 10). * Toto je sériový port, kam budou uloženy hodnoty.
  6. Zkopírujte kód a vložte jej do Arduino IDE a stisknutím ctrl+u nahrajte program.
  7. Opakujte s druhým Arduinem. (při kroku 5 nezapomeňte zvolit jiný port COM, aby oba ovladače nebyly připojeny ke stejnému sériovému portu).

Kód:

neplatné nastavení () {

Serial.begin (9600); pinMode (3, VSTUP); // Řízení Arduinu, aby přijímal vstup z pinu D3 pinMode (9, INPUT); // Řízení Arduinu, aby přijímalo vstup z pinu D9} void loop () {if (digitalRead (3) == 1) { /* Pokud Arduino přijme vstup 1 Serial.write (1); z pinu 3 Výstup hodnoty 1 na sériový port Serial.flush (); */ zpoždění (2); } if (digitalRead (9) == 1) { /* Pokud Arduino přijme vstup 1 Serial.write (2); z pinu 9 Výstup hodnoty 2 na sériový port Serial.flush (); */ zpoždění (2); }}

Vysvětlení programu:

Tento kód jednoduše přebírá vstup z pinu D3 a pinu D9 v Arduinu, které jsou připojeny k tlačítkům. Tlačítka jsou buď stisknutá nebo nestlačená, což znamená, že hodnoty, které jsou z nich převzaty, jsou buď 1 (stisknuto), nebo 0 (nestisknuto). Pokud je vstup z pravého tlačítka (z D9) 1 (stisknuto), uložte hodnotu 1 do sériového portu. Pokud je vstup z levého tlačítka (z D3) 1 (stisknuto), uložte do sériového portu hodnotu 2.

Krok 4: Propojení jednotky pomocí sériového portu

Propojení jednoty se sériovým portem
Propojení jednoty se sériovým portem
Propojení jednoty se sériovým portem
Propojení jednoty se sériovým portem

V tomto kroku identifikujeme sériový port v Unity, aby mohl přijímat vstupy z Arduina po stisknutí tlačítek. Nainstalujte si na svůj notebook Visual Studio Code. Poté přejděte na Unity, vyberte hráče 1 z hierarchie, přejděte dolů, vyberte přidat komponentu a zadejte player1_motion a poté stiskněte Enter. Podívejte se na obrázek 1

V inspektoru se vytvoří skript C#, klikněte na něj pravým tlačítkem a vyberte upravit skript, měl by se otevřít kód vizuálního studia a zobrazí výchozí kód, který vypadá jako obrázek 2.

Zkopírujte následující kód a poté změňte „SerialPort sp = new SerialPort (" COM10 ", 9600);" s SerialPort sp = nový SerialPort („COM port, ke kterému je připojeno vaše Arduino“, 9600); jeho najdete tak, že se vrátíte ke svému kódu Arduino a vyberete Nástroje> Port> COM (jakékoli číslo se objeví).

Kód:

pomocí System. Collections;

pomocí System. Collections. Generic; pomocí UnityEngine; pomocí System. IO. Ports; public class player1_motion: MonoBehaviour {float speed = 8; soukromý pohyblivý pohyb množství; SerialPort sp = nový SerialPort ("COM10", 9600); // Start je volán před první aktualizací rámce void Start () {sp. Open (); sp. ReadTimeout = 1; } // Aktualizace je volána jednou za snímek neplatná 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); }}}

Vysvětlení kódu:

Tento kód říká jednotě přijímat vstupy ze sériového portu (COM 10). Po stisknutí levého tlačítka odešle Arduino na sériový port hodnotu 1, pokud jednota přijme 1 ze sériového portu, přidá se rychlost do herního objektu „hráč 1“v levém směru. Po stisknutí pravého tlačítka odešle Arduino na sériový port hodnotu 2, pokud jednota přijme 2 ze sériového portu, přidá se rychlost k objektu hry „hráč 1“správným směrem. pokud sériový port neobdrží hodnotu ze sériového portu, nepřidá se žádná rychlost v obou směrech, deska zůstane nehybná.

Po zkopírování kódu sestavte a spusťte kód stisknutím klávesy F5. Vraťte se zpět k jednotě a stiskněte tlačítko Přehrát, hráč 1 by se měl pohybovat doprava, když stisknete doprava a doleva, když stisknete doleva.

Nyní proveďte stejné kroky ještě jednou, ale s přehrávačem 2 a nezapomeňte napsat „Přidat komponentu“player2_motion místo player1_motion a identifikovat druhý port COM, ke kterému je připojen druhý řadič, nikoli stejný sériový port.

V samotném kódu budete také muset změnit „public class player1_motion: MonoBehaviour“na „public class player2_motion: MonoBehaviour“.

Krok 5: Přidání míče

Přidání míče
Přidání míče
Přidání míče
Přidání míče
Přidání míče
Přidání míče
  1. Přidejte nový herní objekt, ale tentokrát zvolte místo čtverce kruh.
  2. Přejmenujte jej na „míč“.
  3. Přetahujte v hierarchii.
  4. Upravte měřítko (X: 0,2 - Y: 0,2 - Z: 0,2).
  5. Přidejte Rigidbody 2D a zmrazte pouze osu Z.
  6. Změňte hmotnost na 0,0001
  7. Změňte gravitační stupnici na 0.
  8. Přidejte Box Collider 2D.
  9. Přejděte na Aktiva> Vytvořit> Fyzikální materiál 2D Podívejte se na obrázek 1
  10. změnit jeho název na „odrazit“
  11. Změňte tření na nulu od inspektora
  12. Změňte odskočení na 1 od inspektora
  13. Přetáhněte "odraz" do Rigidbody 2D> Materiál Podívejte se na obrázek 2
  14. Z hierarchie znovu vyberte „míč“a přejděte na přidání komponenty a zadejte Ball_movement a poté stiskněte Enter.
  15. Klikněte pravým tlačítkem na skript a vyberte Upravit skript.
  16. Zkopírujte níže uvedený kód a stisknutím klávesy F5 jej sestavte a spusťte.

Kód:

pomocí System. Collections;

pomocí System. Collections. Generic; pomocí UnityEngine; public class Ball_movement: MonoBehaviour {// Start je volán před aktualizací prvního rámce private float force = 2; void Start () {StartCoroutine (move ()); } IEnumerator move () {yield return new WaitForSeconds (2); GetComponent (). AddForce (nový Vector2 (1f, 0,5f)*0,02f*síla); }}

Vysvětlení kódu

Tento kód udává míči rychlost v obou směrech ve směru X a Y se stejnou velikostí, díky které se míč pohybuje pod úhlem 45 °. V kroku 8 jsme do míče přidali fyzikální materiál a změnili jeho skákací schopnost, což udržuje pohyb míče v celé hře.

Krok 6: Dokončení hry

Dokončení hry
Dokončení hry
Dokončení hry
Dokončení hry
Dokončení hry
Dokončení hry
Dokončení hry
Dokončení hry

Nyní musíme umožnit prohru, pokud spustíte hru, všimnete si, že když míč projde hráče 1 nebo hráče 2, jen se odrazí od hranice a to není přesně to, co v naší hře potřebujeme. Místo toho chceme vytvořit počítadlo skóre, které počítá skóre pokaždé, když se míč dotkne ohraničení nahoru nebo dolů, a resetuje polohu míče.

  1. Přetáhněte míč z hierarchie do projektu, vyrobili jste si panelák, abyste jej mohli použít později.
  2. Klikněte pravým tlačítkem na Hierarchii a vyberte Vytvořit prázdné. zobrazí se prázdný předmět, přejmenujte jej na respawn koule a změňte jeho polohu tak, aby byla stejná jako poloha míče.
  3. Klikněte pravým tlačítkem na hierarchii a vyberte UI >> Text. Všimněte si, že text doprovází plátno, poloha textu ve hře závisí na poloze textu na plátně, nikoli na hranicích naší hry. (Podívejte se na obrázek 1).
  4. Změňte polohu textu na libovolné místo.
  5. Kroky 3 a 4 opakujte znovu pro skóre druhého hráče.
  6. Zadejte první text „Skóre hráče 1: 0“a zadejte druhý text „Skóre hráče 2: 0“. (Podívejte se na obrázek 2).
  7. Vytvořte skript v horním okraji s názvem p1wins a zkopírujte následující kód.

Kód:

pomocí System. Collections;

pomocí System. Collections. Generic; pomocí UnityEngine; pomocí UnityEngine. SceneManagement; pomocí UnityEngine. UI; public class p1wins: MonoBehaviour {public Text score; veřejné Transformovat ball_respawn; veřejný míč GameObject; soukromé int p1 = 0; // Start je volán před zrušením první aktualizace rámce Start () {} // Aktualizace je volána jednou za neplatný snímek Update () {score.text = "Skóre hráče 1:" + p1; } void OnCollisionEnter2D (Collision2D other) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p1 ++; Instantiate (ball, ball_respawn.position, ball_respawn.rotation); }}}

8. Přetáhněte a pusťte prefabrikovaný míč z projektu v kroku 1 do parametru Ball. (Podívejte se na obrázek 3)

9. Přetáhněte míč respawn z hierarchie na parametr Ball-rerspawn. (Podívejte se na obrázek 3)

10. přetáhněte skóre 1 hráče z hierarchie do parametru Score. (Podívejte se na obrázek 3)

Vysvětlení kódu:

Když se míč srazí s horním okrajem, zničí se a znovu se respawnuje v pozici ball_respawn, kterou jsme přiřadili v kroku 2. cílem udělat z míče prefabrikát je jeho schopnost respawnu se všemi jeho vlastnostmi, v opačném případě, pokud jsme míč použili z hierarchie se bude respawnovat, ale nebude se hýbat. Také když se míč srazí s horním okrajem, hodnota, která se původně rovná 0, se nazývá p1, zvýší se o 1. Tato hodnota se zobrazí jako text, takže když se míč srazí s horním okrajem, skóre pro hráče 1 se zvýší o 1.

Nyní proveďte kroky 7, 8, 9 a 10 pro dolní hranici

pro krok 7 vytvořte skript s názvem p2wins a místo toho zkopírujte následující kód.

pro krok 10 přetáhněte skóre hráče 2 z hierarchie do parametru Score.

Kód:

pomocí System. Collections;

pomocí System. Collections. Generic; pomocí UnityEngine; pomocí UnityEngine. SceneManagement; pomocí UnityEngine. UI; public class p2wins: MonoBehaviour {public Text score; veřejné Transformovat ball_respawn; veřejný míč GameObject; soukromé int p2 = 0; // Start je volán před zrušením první aktualizace rámce Start () {} // Aktualizace je volána jednou za neplatný snímek Update () {score.text = "Skóre hráče 2:" + p2; } void OnCollisionEnter2D (Collision2D other) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p2 ++; Instantiate (ball, ball_respawn.position, ball_respawn.rotation); }}}

Doporučuje: