INHOUDSOPGAWE:
- Voorrade
- Stap 1: Stel die spelgrense op
- Stap 2: Voeg planke by en maak beheerders
- Stap 3: Verbind Arduino met die seriële poort
- Stap 4: Koppel eenheid met die seriële poort
- Stap 5: Voeg die bal by
- Stap 6: Finalisering van die spel
Video: Hoe om 'n multiplayer -speletjie te maak met Arduino -beheerders: 6 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:23
Het u al ooit gewonder hoe spelontwikkelaars ongelooflike speletjies skep wat mense wêreldwyd geniet om te speel? Wel, vandag gaan ek u net 'n klein wenk gee daaroor deur 'n klein multiplayer -speletjie te maak wat beheer word deur óf 'n Arduino -kontroleerder wat u ook sal maak. Dus, laat ons begin.
Voorrade
Jy sal nodig hê:
- N skootrekenaar
- Eenheidsmotor
- 'N C# IDE wat saam met Unity werk, soos visual studio of Atom. (Ek sal Visual Studio Code gebruik)
- 2X Arduino Nano
- 2X Grootbroodbord
- 2X klein broodbord
- 4X -skakelaar (drukknop)
- 4X 200Ω Weerstand
- 12X manlike tot manlike draaddrade
- Arduino IDE
Dit sal handig wees as u 'n basiese begrip van die gebruik van Unity het, maar dit beïnvloed nie u vordering nie, aangesien u daarmee vertroud sal raak terwyl u aan die gang is met die spel.
Skakel om Unity Engine af te laai:
store.unity.com/download-nuo
Skakel vir die aflaai van Visual Studio Code IDE:
code.visualstudio.com/download
Skakel om Arduino IDE af te laai:
www.arduino.cc/en/Main/Software
Stap 1: Stel die spelgrense op
Eerstens moet u eenheid aflaai
Sodra dit klaar is, kan u begin met die opstel van u spelbeskouing.
Maak 'n nuwe Unity -projek oop, noem dit en kies 2D -speletjie.
As die projek oopmaak, let op dat daar drie hoofafdelings genoem word
- Hiërargie (dit is waar al u spelvoorwerpe en besonderhede bygevoeg sal word).
- Toneel (waar u die spelbeskouing opstel).
- Spel (waar u kan toets hoe die regte spel sal verloop).
Let op dat onder die hiërargie u toneel is en onder die toneel die 'Hoofkamera'. As u die kamera uit die hiërargie kies, word dit in die toneel gekies
(Enigiets binne die grense van hierdie kamera sal in die regte spel verskyn).
Kyk na prent 1
Ons spel bestaan uit twee planke, 'n bal wat rondbeweeg, en grense wat die beweging van die planke en die bal beperk.
Laat ons begin deur die grense te skep.
- Om 'n nuwe spelvoorwerp te skep, kies Bates> Skep> Sprites> vierkant (noem dit "regter- en linkergrense") Kyk na prent 2
- Sleep die grense na regs en links na die hiërargie, en 'n vierkant verskyn in die toneel.
- Pas die posisie van sy x -as na (5) "regter- en linkergrense"> inspekteur> transformeer> posisie> X. Kyk na prent 3
- Pas dan die skaal aan sodat dit groot genoeg is om die rande van die kamera te bedek (sleep die boonste en onderste kant van die vierkant om dit te rek).
- Pas die kleur aan "van regter- en linkerrand"> inspekteur> sprite -weergawe> kleur. Kyk na prent 3
- Blaai af in die inspekteur en kies add component, tik Rigidbody2D en druk enter, dit sal basies fisika by u spelvoorwerp voeg, aangesien dit massa, swaartekrag en botsingsopsporing gee. Ons het egter nie swaartekrag nodig in ons spel nie, dus maak die gravitasie in plaas daarvan 1. U moet ook die posisie en rotasie vries sodat die grens nie beweeg as dit bots nie. Kyk na prent 4
- kies voeg komponent toe, tik Box Collider 2D en druk enter om 'n gebied rondom die spelvoorwerp by te voeg waar botsings opgespoor kan word. Kyk na prent 4
- Kies nou die regter- en linkergrense en druk (ctrl+d) om dit te dupliseer.
- Hernoem dit "linkerrand" en hernoem die eerste een ("regterkant").
- Kies die linkerrand en pas die posisie van die x-as na (-5) op dieselfde manier in stap 3. Nou het u die regter- en linkerrand.
Herhaal die vorige 10 stappe met die op- en afgrense en verander die vierkant se y -posisie in plaas van die x -posisie. Die laaste voorskou moet iets soortgelyk aan die in die prentjie wees.
Kyk na prent 5
Stap 2: Voeg planke by en maak beheerders
Byvoeging van borde
Maak 'n nuwe spelvoorwerp en noem dit speler 1.
Pas aan:
- Skaal: X (1.2), Y (0.15), Z (1)
- Posisie: X (0), Y (-3.6), z (0)
- Voeg BoxCollider2D by
- Voeg Rigidbody 2D by en vries die y- en z -as.
Dupliseer (ctrl+d) en hernoem die kopiespeler 2.
Pas aan:
- Skaal: X (1.2), Y (0.15), Z (1)
- Posisie: X (0), Y (3.6), z (0)
- 'N BoxCollider sal reeds daar wees.
- 'N Rigidbody 2D sal reeds daar wees en die y- en z -asse sal reeds gevries word.
Kyk na prent 1
Maak beheerders
Jy sal nodig hê:
- 2X Arduino Nano
- 2X Grootbroodbord
- 2X klein broodbord
- 4X -skakelaar (drukknop)
- 4X Weerstand
- 12X manlike tot manlike draaddrade
Kyk nou na die broodbordfoto's en kartering om die joysticks te monteer.
- Bevestig een Arduino Nano -skyfie met 'n klein broodbord.
- Heg 2 klepskakelaars aan op die groot broodbord, soos in die prentjie getoon. reël)
- Verbind die pen links bo van die linkerknoppie met die 5V-pen in die Arduino op die klein broodbord (dinge wat met dieselfde kolom in die broodbord verbind word, is met mekaar verbind).
- Verbind die pen regs bo van die regterknoppie met die 5V-pen in die Arduino.
- Verbind die pen onder regs van die linkerknoppie met 'n punt op die 31ste kolom met 'n weerstand.
- Verbind die pen onder aan die regterknoppie met 'n punt op die 29ste kolom met 'n weerstand.
- Verbind die weerstande met die GND -pen in die Arduino.
- Verbind die pen regs bo van die linkerknoppie met die D3-pen in die Arduino.
- Verbind die pen links bo van die regterknoppie met die D9-pen in die Arduino.
- Herhaal nou hierdie stappe en maak die tweede kontroleerder.
Stap 3: Verbind Arduino met die seriële poort
Eerstens moet u die Arduino IDE installeer.
Sodra hulle geïnstalleer is, kan u begin met 'n Arduino -program wat insette van die knoppies ontvang en dit in 'n seriële poort (COM -poort) stoor. As 'n Arduino -bord aan u skootrekenaar gekoppel is, herken die bedryfstelsel die bord outomaties as 'n seriële poort, waarheen programme opgelaai kan word. Die waardes wat in die seriële poort gestoor is, kan in die volgende stap gebruik word wanneer ons Unity Engine met die seriële poort verbind.
Kom ons verbind nou die Arduino met die seriële poort.
Kyk na die prente
- Koppel 'n Arduino met u skootrekenaar
- Gereedskap> Bord> Arduino Nano
- As u Arduino-chip onlangs (2018-2020) gereedskap> verwerker> ATmega328P (Old Bootloader) is.
- As u Arduino -chip nie onlangs (voor 2018) gereedskap> verwerker> ATmega328P is nie
- Gereedskap> Poort> COM (watter nommer ook al verskyn, in my geval is dit 10). * Dit is die seriële poort waar waardes gestoor sal word.
- Kopieer die kode en plak dit in die Arduino IDE en druk ctrl+u om die program op te laai.
- Herhaal met die tweede Arduino. (as u stap 5 doen, moet u 'n ander COM -poort kies, sodat beide beheerders nie aan dieselfde seriële poort gekoppel kan word nie).
Kode:
ongeldige opstelling () {
Serial.begin (9600); pinMode (3, INVOER); // Vertel die Arduino om 'n insette van pin D3 pinMode (9, INPUT) te ontvang; // Sê vir die Arduino om 'n insette van pen D9} leemte -lus () {if (digitalRead (3) == 1) { /* te ontvang as die Arduino 'n inset van 1 Serial.write (1) ontvang; vanaf pen 3 Gee 'n waarde van 1 na die seriële poort Serial.flush (); */ vertraging (2); } if (digitalRead (9) == 1) { /* As die Arduino 'n inset van 1 Serial.write (2) ontvang; vanaf pen 9 Gee 'n waarde van 2 na die seriële poort Serial.flush (); */ vertraging (2); }}
Program verduideliking:
Hierdie kode neem eenvoudig 'n invoer van die D3 -pen en die D9 -pen in die Arduino, wat aan die knoppies gekoppel is. Die knoppies word óf ingedruk óf ongedruk, wat beteken dat die lesings wat daaruit geneem word óf 1 (ingedruk) óf 0 (ongedruk) is. As die invoer van die regterknoppie (vanaf D9) 1 (ingedruk) is, stoor 'n waarde van 1 in die seriële poort. As die invoer vanaf die linkerknoppie (vanaf D3) 1 is (ingedruk), stoor 'n waarde van 2 in die seriële poort.
Stap 4: Koppel eenheid met die seriële poort
Vir hierdie stap gaan ons die seriële poort in Unity identifiseer, sodat dit die insette van Arduino kan ontvang as die knoppies ingedruk word. Installeer Visual Studio Code op u skootrekenaar. Gaan dan na Unity, kies speler 1 uit die hiërargie, blaai af en kies komponent voeg en tik player1_motion en druk dan enter. Kyk na prent 1
'N C# -skrip sal in die inspekteur geskep word, met die rechtermuisknop daarop en kies' edit script ', die visuele ateljeekode moet oopmaak en 'n standaardkode wat op prent 2 lyk, vertoon.
Kopieer die volgende kode en verander dan "SerialPort sp = new SerialPort (" COM10 ", 9600);" met SerialPort sp = nuwe SerialPort ("COM -poort waarmee u Arduino gekoppel is", 9600); u kan dit vind deur terug te gaan na u Arduino -kode en na Tools> Port> COM te gaan (watter nommer ook al verskyn).
Kode:
met behulp van System. Collections;
met behulp van System. Collections. Generic; gebruik UnityEngine; met behulp van System. IO. Ports; openbare klas player1_motion: MonoBehaviour {float speed = 8; privaat dryf amounttomove; SerialPort sp = nuwe SerialPort ("COM10", 9600); // Start word genoem voor die eerste raamopdatering leemte Start () {sp. Open (); sp. ReadTimeout = 1; } // Update word een keer per raam leeggemaak Update () {amounttomove = spoed*0.01f; as (sp. IsOpen) {probeer {moveObject (sp. ReadByte ()); print (sp. ReadByte ()); } catch (System. Exception) {}}} void moveObject (int Direction) {if (Direction == 1) {transform. Translate (Vector3.links*amounttomove, Space. World); } as (Rigting == 2) {transform. Translate (Vector3.right*amounttomove, Space. World); }}}
Kode se verduideliking:
Hierdie kode vertel die eenheid om insette vanaf die seriële poort (COM 10) te ontvang. As die linkerknoppie ingedruk word, stuur die Arduino 'n waarde van 1 na die seriële poort, as eenheid 1 van die seriële poort ontvang, word 'n snelheid by die spelvoorwerp "speler 1" in die linker rigting gevoeg. As die regte knoppie ingedruk word, stuur die Arduino 'n waarde van 2 na die seriële poort, as eenheid 2 uit die seriële poort ontvang, word 'n snelheid in die regte rigting by die spelvoorwerp "speler 1" gevoeg. as die seriële poort geen waarde van die seriële poort ontvang nie, word geen snelheid in beide rigtings bygevoeg nie, daarom bly die bord stil.
Nadat u die kode gekopieer het, druk F5 om die kode te bou en uit te voer. Gaan terug na eenheid en druk die speelknoppie; speler 1 moet regs beweeg as u regs en links druk as u links druk.
Doen nou dieselfde stappe, maar met speler 2 en skryf in die 'Voeg komponent' speler2_motion in plaas van player1_motion en identifiseer die tweede COM -poort waarmee die tweede beheerder gekoppel is, nie dieselfde seriële poort nie.
U moet ook "public class player1_motion: MonoBehaviour" verander na "public class player2_motion: MonoBehaviour" in die kode self.
Stap 5: Voeg die bal by
- Voeg 'n nuwe spelvoorwerp by, maar kies hierdie keer 'n sirkel in plaas van 'n vierkant.
- Hernoem dit "bal".
- Sleep en laat val in die hiërargie.
- Pas die skaal aan (X: 0.2 - Y: 0.2 - Z: 0.2).
- Voeg 'n Rigidbody 2D by en vries slegs die Z -as.
- Verander die massa na 0,0001
- Verander die gravitasie skaal na 0.
- Voeg 'n Box Collider 2D by.
- Gaan na bates> skep> fisika materiaal 2D kyk na prent 1
- verander sy naam na "weiering"
- Verander die wrywing in nul van die inspekteur
- Verander die sprankel na 1 van die inspekteur
- Sleep "weiering" in Rigidbody 2D> Materiaal Kyk na prent 2
- Kies weer 'bal' uit die hiërargie en gaan na die komponent by en tik Ball_movement en druk op enter.
- Klik met die rechtermuisknop op die script en kies edit script.
- Kopieer die onderstaande kode en druk F5 om dit te bou en uit te voer.
Kode:
met behulp van System. Collections;
met behulp van System. Collections. Generic; gebruik UnityEngine; openbare klas Ball_movement: MonoBehaviour {// Start word gebel voor die eerste raamopdatering private float force = 2; leegloop Start () {StartCoroutine (move ()); } IEnumerator move () {opbrengs opbrengs nuwe WaitForSeconds (2); GetComponent (). AddForce (nuwe Vector2 (1f, 0.5f)*0.02f*krag); }}
Kode 'verduideliking
Hierdie kode gee die bal 'n snelheid in beide rigtings in die X -rigting en die Y -rigting met dieselfde grootte, wat die bal in 'n hoek van 45 ° laat beweeg. In stap 8 het ons 'n fisika -materiaal by die bal gevoeg en die stewigheid daarvan verander; dit behou die beweging van die bal deur die spel.
Stap 6: Finalisering van die spel
Nou moet ons verloor moontlik maak. As u die spel hardloop, sal u agterkom dat wanneer die bal speler 1 of speler 2 verbysteek, dit net van die grens af spring, en dit is nie presies wat ons in ons spel nodig het nie. In plaas daarvan wil ons 'n tellerteller maak wat die telling tel elke keer as die bal teen die op- of afgrense bots en die posisie van die bal herstel.
- Sleep die bal van die hiërargie na die projek, u het 'n voorafvervaardigde bal gemaak sodat u dit later kan gebruik.
- Klik met die rechtermuisknop op die hiërargie en kies Maak leeg. 'n leë voorwerp verskyn, hernoem dit na balherhaling en verander die posisie in dieselfde posisie as die bal se posisie.
- Klik met die rechtermuisknop op die hiërargie en kies UI >> Text. Let op dat die teks met 'n doek gepaard gaan, die posisie van die teks in die spel hang af van die posisie van die teks in die doek, nie in die grense van ons spel nie. (Kyk na prent 1).
- Verander die posisie van die teks na waar u dit ook al wil hê.
- Herhaal stap 3 en 4 weer vir die telling van die tweede speler.
- Tik die eerste teks "Speler 1 telling: 0" in en tik die tweede teks "Speler 2 telling: 0" in. (Kyk na prent 2).
- Skep 'n script in die boonste rand met die naam p1wins en kopieer die volgende kode.
Kode:
met behulp van System. Collections;
met behulp van System. Collections. Generic; gebruik UnityEngine; met behulp van UnityEngine. SceneManagement; gebruik UnityEngine. UI; openbare klas p1wins: MonoBehaviour {publieke teks telling; publiek Transformeer ball_respawn; openbare GameObject -bal; private int p1 = 0; // Begin word voor die eerste raamopdatering leemte genoem Start () {} // Update word een keer per raam leeggemaak Update () {score.text = "Speler 1 telling:" + p1; } maak OnCollisionEnter2D ongeldig (Collision2D anders) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p1 ++; Instantiate (bal, bal_respawn.posisie, bal_respawn.rotasie); }}}
8. Sleep die voorafvervaardigde bal van die projek in stap 1 na die balparameter. (Kyk na prent 3)
9. Sleep die bal van die hiërargie na die bal-rerspawn parameter. (Kyk na prent 3)
10. sleep speler 1 telling van hiërargie na die telling parameter. (Kyk na prent 3)
Kode se verduideliking:
As die bal met die boonste rand bots, word dit vernietig en weer teruggekeer by die bal_respawn -posisie wat ons in stap 2 toegeken het. uit die hiërargie sal dit weer opkom, maar dit sal nie beweeg nie. As die bal met die boonste grens bots, neem 'n waarde wat oorspronklik gelyk is aan 0 genaamd p1 toe met 1. Hierdie waarde word as teks vertoon, dus as die bal met die boonste grens bots, verhoog die telling vir speler 1 met 1.
Doen nou stappe 7, 8, 9 en 10 vir die afgrens
vir stap 7, skep 'n script genaamd p2wins en kopieer die volgende kode in plaas daarvan.
vir stap 10, sleep en speel speler 2 -telling van die hiërargie na die tellingparameter.
Kode:
met behulp van System. Collections;
met behulp van System. Collections. Generic; gebruik UnityEngine; gebruik UnityEngine. SceneManagement; gebruik UnityEngine. UI; openbare klas p2wins: MonoBehaviour {publieke teks telling; publiek Transformeer ball_respawn; openbare GameObject -bal; private int p2 = 0; // Begin word voor die eerste raamopdatering leemte begin () {} // Opdatering word een keer per raam leeggemaak Update () {score.text = "Speler 2 telling:" + p2; } maak OnCollisionEnter2D ongeldig (Collision2D anders) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p2 ++; Instantiate (bal, bal_respawn.posisie, bal_respawn.rotasie); }}}
Aanbeveel:
Hoe om 'n hommeltuig te maak met Arduino UNO - Maak 'n quadcopter met behulp van mikrokontroller: 8 stappe (met foto's)
Hoe om 'n hommeltuig te maak met Arduino UNO | Maak 'n quadcopter met behulp van mikrobeheerder: inleiding Besoek my Youtube -kanaal 'n Drone is 'n baie duur apparaat (produk) om te koop. In hierdie pos gaan ek bespreek hoe ek dit goedkoop kan maak ?? En hoe kan u u eie goedkoop maak teen goedkoop pryse … In Indië is al die materiale (motors, ESC's
Hoe om 'n pasgemaakte PCB te maak met 'n lasergraveur met lae krag: 8 stappe (met foto's)
Hoe om 'n pasgemaakte PCB te maak met 'n lasergraveur met 'n lae krag: As u 'n tuisgemaakte PCB wil maak, kan u verskeie metodes aanlyn vind: van die mees basiese, met slegs 'n pen, tot die meer gesofistikeerde met behulp van 3D -drukkers en ander toerusting. En hierdie tutoriaal val op die laaste geval! In hierdie projek vertel ek
Hoe om 'n DIY Bartop -arcade vir twee spelers te maak met aangepaste markies, met 'n Pandora -boks: 17 stappe (met foto's)
Hoe om 'n DIY Bartop -arcade vir twee spelers te maak met aangepaste markiesmuntstukke, met behulp van 'n Pandora -boks: dit is 'n stap -vir -stap handleiding oor hoe om 'n boonste arcade -masjien vir twee spelers te bou met persoonlike muntstukke wat in die markie ingebou is. Die muntstukke sal so gemaak word dat dit slegs munte aanvaar wat die grootte van 'n kwartier of groter is. Hierdie arcade word aangedryf
Hoe om 'n hoë krag LED -koplamp vir die fiets te maak: 4 stappe (met foto's)
Hoe om 'n hoë krag LED -koplamp vir 'n fiets te maak: dit is altyd gerieflik om 'n helder lig te hê terwyl u snags fietsry vir duidelike visie en veiligheid. Dit waarsku ook ander in donker plekke en vermy ongelukke. So in hierdie instruksies sal ek demonstreer hoe u 'n 100 watt LED p bou en installeer
Musiekreaktiewe lig -- Hoe om 'n super -eenvoudige musiekreaktiewe lig te maak vir die maak van 'n tafelblad: 5 stappe (met foto's)
Musiekreaktiewe lig || Hoe om 'n super -eenvoudige musiekreaktiewe lig te maak om lessenaars te maak: Hallo ouens, vandag bou ons 'n baie interessante projek. Vandag gaan ons musiek reaktiewe lig bou. Die LED sal sy helderheid verander volgens die bas wat eintlik 'n lae-frekwensie klanksein is. Dit is baie eenvoudig om te bou. Ons sal