Sisällysluettelo:

Kuinka tehdä moninpeli Arduino -ohjaimilla: 6 vaihetta
Kuinka tehdä moninpeli Arduino -ohjaimilla: 6 vaihetta

Video: Kuinka tehdä moninpeli Arduino -ohjaimilla: 6 vaihetta

Video: Kuinka tehdä moninpeli Arduino -ohjaimilla: 6 vaihetta
Video: DIY -paperilohikäärme kuten TikTokissa 2024, Heinäkuu
Anonim
Kuinka tehdä moninpeli Arduino -ohjaimilla
Kuinka tehdä moninpeli Arduino -ohjaimilla

Oletko koskaan miettinyt, kuinka pelikehittäjät luovat hämmästyttäviä pelejä, joita ihmiset ympäri maailmaa nauttivat pelaamisesta? No, tänään aion antaa sinulle vain pienen vihjeen siitä tekemällä pienen moninpelin, jota ohjaa joko tekemäsi Arduino -ohjain. Aloitetaan siis.

Tarvikkeet

Tarvitset:

  • Läppäri
  • Unity -moottori
  • C# IDE, joka toimii Unityn kanssa, kuten visual studio tai Atom. (Käytän Visual Studio -koodia)
  • 2X Arduino Nano
  • 2X iso leipälauta
  • 2X pieni leipälauta
  • 4X tack -kytkin (painike)
  • 4X 200Ω vastus
  • 12X uros -uros -hyppyjohdot
  • Arduino IDE

Siitä on hyötyä, jos sinulla on perustiedot Unityn käytöstä, mutta se ei vaikuta edistymiseesi, sillä opit tuntemaan sen samalla, kun teet peliä.

Linkki Unity Enginen lataamiseen:

store.unity.com/download-nuo

Linkki Visual Studio Code IDE: n lataamiseen:

code.visualstudio.com/download

Linkki Arduino IDE: n lataamiseen:

www.arduino.cc/en/Main/Software

Vaihe 1: Aseta pelin reunat

Aseta pelin reunat
Aseta pelin reunat
Aseta pelin reunat
Aseta pelin reunat
Aseta pelin reunat
Aseta pelin reunat

Ensinnäkin sinun on ladattava unity

Kun tämä on tehty, voit aloittaa pelinäkymän määrittämisen.

Avaa uusi Unity -projekti, nimeä se ja valitse 2D -peli.

Kun projekti avautuu, huomaa, että on kolme pääosaa nimeltään

  • Hierarkia (tähän lisätään kaikki peliobjektisi ja yksityiskohtasi).
  • Kohtaus (jossa määrität pelin näkymän).
  • Peli (jossa voit testata, miten todellinen peli menee).

Huomaa, että hierarkian alla on kohtauksesi ja kohtauksen alla on "pääkamera". Kun valitset kameran hierarkiasta, se valitaan kohtauksessa

(Kaikki tämän kameran rajojen sisällä näkyy todellisessa pelissä).

Katso kuva 1

Pelimme koostuu kahdesta laudasta, pallosta, joka liikkuu ympäriinsä, ja rajoista, jotka rajoittavat lautojen ja pallon liikkumista.

Aloitetaan luomalla rajat.

  1. Jos haluat luoda uuden peliobjektin, valitse Omaisuus> Luo> Sprites> neliö (nimeä se”oikea ja vasen reuna”) Katso kuva 2
  2. Vedä ja pudota oikeat ja vasemmat reunat hierarkiaan, ja näytölle tulee neliö.
  3. Säädä sen x -akselin asento (5) "oikea ja vasen reuna"> tarkastaja> muunnos> asento> X. Katso kuva 3
  4. Säädä sen asteikkoa niin suureksi, että se peittää kameran reunat (vedä neliön ylä- ja alareunaa venyttääksesi sitä).
  5. Säädä sen väriä "oikealta ja vasemmalta reunalta"> tarkastaja> sprite render> väri. Katso kuva 3
  6. Vieritä alas tarkastajaan ja valitse lisää komponentti, kirjoita sitten Rigidbody2D ja paina enter. Tämä lisää periaatteessa fysiikkaa peliobjektiisi, koska se antaa sille massan, painovoiman ja törmäystunnistuksen. Emme kuitenkaan tarvitse painovoimaa pelissämme, joten tee painovoima 0 sen sijaan. Sinun on myös jäädytettävä sijainti ja kierto, jotta raja ei liiku törmäyksen sattuessa. Katso kuva 4
  7. valitse lisää komponentti ja kirjoita sitten Box Collider 2D ja paina enter. Tämä lisää alueen pelialueen ympärille, jossa törmäykset voidaan havaita. Katso kuva 4
  8. Valitse nyt oikea ja vasen reuna ja kopioi painamalla (ctrl+d).
  9. Nimeä se uudelleen "vasemmalle reunalle" ja nimeä ensimmäinen ("oikea reuna").
  10. Valitse vasen reuna ja säädä sen x-akselin asento (-5) samalla tavalla vaiheessa 3. Nyt sinulla on oikea ja vasen reuna.

Toista edelliset 10 vaihetta ylä- ja alanuolilla ja muuta neliön y -sijaintia x -sijainnin sijaan. Lopullisen esikatselun pitäisi olla jotain samanlaista kuin kuvassa.

Katso kuvaa 5

Vaihe 2: Taulujen lisääminen ja ohjaimien tekeminen

Taulujen lisääminen ja ohjaimien tekeminen
Taulujen lisääminen ja ohjaimien tekeminen
Taulujen lisääminen ja ohjaimien tekeminen
Taulujen lisääminen ja ohjaimien tekeminen
Taulujen lisääminen ja ohjaimien tekeminen
Taulujen lisääminen ja ohjaimien tekeminen

Taulujen lisääminen

Luo uusi peliobjekti ja nimeä se pelaajaksi 1.

Säätää:

  • Asteikko: X (1.2), Y (0.15), Z (1)
  • Asento: X (0), Y (-3,6), z (0)
  • Lisää BoxCollider2D
  • Lisää Rigidbody 2D ja jäädytä y- ja z -akselit.

Kopioi (ctrl+d) ja nimeä kopiokone 2 uudelleen.

Säätää:

  • Asteikko: X (1.2), Y (0.15), Z (1)
  • Asento: X (0), Y (3.6), z (0)
  • BoxCollider on jo paikalla.
  • Rigidbody 2D on jo olemassa ja y- ja z -akselit ovat jo jäässä.

Katso kuva 1

Ohjaimien valmistus

Tarvitset:

  • 2X Arduino Nano
  • 2X iso leipälauta
  • 2X pieni leipälauta
  • 4X tack -kytkin (painike)
  • 4X vastus
  • 12X uros -uros -hyppyjohdot

Katso nyt leipälevyn valokuvia ja kartoitusta ohjaussauvojen kokoamiseksi.

  1. Kiinnitä yksi Arduino Nano -siru pienellä leipälaudalla.
  2. kiinnitä 2 tack -kytkintä suurelle leipälaudalle kuvan osoittamalla tavalla. yritä pitää leipälaudan oikea puoli symmetrisenä vasemmanpuoleiseen, koska se saa ohjaussauvan näyttämään paremmalta (voit käyttää 30. saraketta symmetriana linja)
  3. Liitä vasemman painikkeen vasen ylätappi pienen leipälevyn Arduinon 5 V: n tapiin (asiat, jotka on liitetty samaan sarakkeeseen leipälaudalla, on kytketty toisiinsa).
  4. Kytke oikean painikkeen oikea ylänasta Arduinon 5 V: n nastaan.
  5. Kytke vasemman painikkeen oikea alareuna 31. sarakkeen pisteeseen vastuksen avulla.
  6. Kytke oikean painikkeen vasen alareunan tappi 29. sarakkeen pisteeseen vastuksen avulla.
  7. Liitä vastukset Arduinon GND -tapilla.
  8. Liitä vasemman painikkeen oikea ylätappi Arduinon D3-nastaan.
  9. Kytke oikean painikkeen vasen ylänasta Arduinon D9-nastaan.
  10. Toista nyt nämä vaiheet ja tee toinen ohjain.

Vaihe 3: Arduinon liittäminen sarjaporttiin

Arduinon yhdistäminen sarjaporttiin
Arduinon yhdistäminen sarjaporttiin
Arduinon yhdistäminen sarjaporttiin
Arduinon yhdistäminen sarjaporttiin
Arduinon yhdistäminen sarjaporttiin
Arduinon yhdistäminen sarjaporttiin
Arduinon yhdistäminen sarjaporttiin
Arduinon yhdistäminen sarjaporttiin

Ensin sinun on asennettava Arduino IDE.

Kun ne on asennettu, voit aloittaa tekemällä Arduino -ohjelman, joka vastaanottaa syötteet painikkeista ja tallentaa ne sarjaporttiin (COM -portti). Kun Arduino -kortti on kytketty kannettavaan tietokoneeseesi, käyttöjärjestelmä tunnistaa levyn automaattisesti sarjaportiksi, johon ohjelmat voidaan ladata. Sarjaporttiin tallennettuja arvoja voidaan käyttää seuraavassa vaiheessa, kun Unity Engine yhdistetään sarjaporttiin.

Yhdistetään nyt Arduino sarjaporttiin.

Katso kuvat

  1. Yhdistä Arduino kannettavaan tietokoneeseen
  2. Työkalut> Hallitus> Arduino Nano
  3. Jos Arduino-sirusi on tuore (2018-2020) Työkalut> Suoritin> ATmega328P (vanha käynnistyslatain).
  4. Jos Arduino -sirusi ei ole uusi (ennen vuotta 2018) Työkalut> Suoritin> ATmega328P
  5. Työkalut> Portti> COM (mikä tahansa numero näkyy, minun tapauksessani se on 10). * Tämä on sarjaportti, johon arvot tallennetaan.
  6. Kopioi koodi ja liitä se Arduino IDE: hen ja lataa ohjelma painamalla ctrl+u.
  7. Toista toisen Arduinon kanssa. (kun teet vaihetta 5, muista valita toinen COM -portti, jotta molemmat ohjaimet eivät ole yhteydessä samaan sarjaporttiin).

Koodi:

void setup () {

Sarja.alku (9600); pinMode (3, TULO); // Kerro Arduinolle, että se vastaanottaa tulon nasta D3 pinMode (9, INPUT); // Kerro Arduinolle, että se vastaanottaa syötteen nastalta D9} void loop () {if (digitalRead (3) == 1) { /* Jos Arduino vastaanottaa 1 Serial.write (1) -tulon; nasta 3 Lähtöarvo 1 sarjaporttiin Serial.flush (); */ viive (2); } if (digitalRead (9) == 1) { /* Jos Arduino vastaanottaa tulon 1 Serial.write (2); nastasta 9 Syötä arvo 2 sarjaporttiin Serial.flush (); */ viive (2); }}

Ohjelman selitys:

Tämä koodi yksinkertaisesti ottaa syötteen painikkeisiin yhdistetyistä D3 -nastaisista ja D9 -nastoista Arduinossa. Painikkeet ovat joko painettuja tai painamattomia, mikä tarkoittaa, että niistä mitatut lukemat ovat joko 1 (painettu) tai 0 (painamatta). Jos oikeanpuoleisen painikkeen (D9) tulo on 1 (painettuna), tallenna arvo 1 sarjaporttiin. Jos vasemman painikkeen (D3) tulo on 1 (painettuna), tallenna sarjaporttiin arvo 2.

Vaihe 4: Unityn yhdistäminen sarjaporttiin

Unityn yhdistäminen sarjaporttiin
Unityn yhdistäminen sarjaporttiin
Unityn yhdistäminen sarjaporttiin
Unityn yhdistäminen sarjaporttiin

Tässä vaiheessa tunnistamme Unityn sarjaportin, jotta se voi vastaanottaa tulot Arduinolta, kun painikkeita painetaan. Asenna Visual Studio Code kannettavaan tietokoneeseesi. Siirry sitten Unityyn, valitse pelaaja 1 hierarkiasta, vieritä alas ja valitse lisää komponentti ja kirjoita player1_motion ja paina sitten enter. Katso kuva 1

Tarkastajaan luodaan C# -skripti, napsauta sitä hiiren kakkospainikkeella ja valitse muokkaa komentosarjaa, visual studio -koodin pitäisi avautua ja näyttää oletuskoodin, joka näyttää kuvalta 2.

Kopioi seuraava koodi ja muuta "SerialPort sp = new SerialPort (" COM10 ", 9600);" jossa SerialPort sp = uusi SerialPort ("COM -portti, johon Arduino on kytketty", 9600); voit löytää hänen palaamalla Arduino -koodiin ja goning Tools> Port> COM (mikä tahansa numero näkyy).

Koodi:

System. Collectionsin avulla;

käyttämällä System. Collections. Generic; käyttämällä UnityEngineä; käyttämällä System. IO. Portsia; public class player1_motion: MonoBehaviour {float speed = 8; yksityinen kelluva amounttomove; SerialPort sp = uusi SerialPort ("COM10", 9600); // Aloitus kutsutaan ennen ensimmäistä kehyspäivitystä void Start () {sp. Open (); sp. ReadTimeout = 1; } // Päivitys kutsutaan kerran kehystä kohti tyhjä Päivitys () {amounttomove = nopeus*0.01f; if (sp. IsOpen) {try {moveObject (sp. ReadByte ()); tulosta (sp. ReadByte ()); } saalis (System. Exception) {}}} void moveObject (int suunta) {if (suunta == 1) {transform. Translate (Vector3.left*amounttomove, Space. World); } if (Suunta == 2) {transform. Translate (Vector3.right*amounttomove, Space. World); }}}

Koodin selitys:

Tämä koodi kertoo unitylle vastaanottaa tuloja sarjaportista (COM 10). Kun vasenta painiketta painetaan, Arduino lähettää arvon 1 sarjaporttiin, jos yhtenäisyys vastaanottaa 1 sarjaportista, nopeus lisätään peliobjektiin "pelaaja 1" vasemmalle. Kun oikeaa painiketta painetaan, Arduino lähettää arvon 2 sarjaporttiin, jos yhtenäisyys vastaanottaa 2 sarjaportista, nopeus lisätään peliobjektiin "pelaaja 1" oikeaan suuntaan. Jos sarjaportti ei saa arvoa sarjaportista, nopeutta ei lisätä kumpaankaan suuntaan, joten levy pysyy paikallaan.

Kun olet kopioinut koodin, luo ja suorita koodi painamalla F5 -näppäintä. Palaa yhtenäisyyteen ja paina toistopainiketta, pelaajan 1 pitäisi liikkua oikealle, kun painat oikealle ja vasemmalle, kun painat vasemmalle.

Suorita nyt samat vaiheet uudelleen, mutta soittimen 2 kanssa ja muista kirjoittaa 'Lisää komponentti' player2_motion player1_motion sijasta ja tunnista toinen COM -portti, johon toinen ohjain on kytketty, ei sama sarjaportti.

Sinun on myös muutettava koodissa "public class player1_motion: MonoBehaviour" tilalle "public class player2_motion: MonoBehaviour".

Vaihe 5: Lisää pallo

Pallon lisääminen
Pallon lisääminen
Pallon lisääminen
Pallon lisääminen
Pallon lisääminen
Pallon lisääminen
  1. Lisää uusi peliobjekti, mutta tällä kertaa valitse ympyrä neliön sijaan.
  2. Nimeä se uudelleen "palloksi".
  3. Vedä ja pudota hierarkiassa.
  4. Säädä asteikkoa (X: 0,2 - Y: 0,2 - Z: 0,2).
  5. Lisää jäykkä runko 2D ja jäädytä vain Z -akseli.
  6. Muuta massa arvoon 0,0001
  7. Muuta painovoima -asteikko arvoon 0.
  8. Lisää Box Collider 2D.
  9. Siirry kohtaan Omaisuus> Luo> Fysiikka -aineisto 2D Katso kuva 1
  10. muuttaa sen nimen "pomppia"
  11. Muuta kitka nollaksi tarkastajalta
  12. Muuta tarkastajan bounciness -arvoksi 1
  13. Vedä ja pudota "pomppia" Rigidbody 2D> Materiaali Katso kuva 2
  14. Valitse "pallo" uudelleen hierarkiasta ja lisää komponentti ja kirjoita Ball_movement ja paina sitten enter.
  15. Napsauta skriptiä hiiren kakkospainikkeella ja valitse muokkaa komentosarjaa.
  16. Kopioi alla oleva koodi ja luo ja suorita se painamalla F5 -näppäintä.

Koodi:

System. Collectionsin avulla;

käyttämällä System. Collections. Generic; käyttämällä UnityEngineä; public class Ball_movement: MonoBehaviour {// Start kutsutaan ennen ensimmäistä kehyspäivitystä private float force = 2; void Start () {StartCoroutine (move ()); } IEnumerator move () {tuotto palauttaa uuden WaitForSeconds (2); GetComponent (). AddForce (uusi Vector2 (1f, 0,5f)*0,02f*voima); }}

Koodin selitys

Tämä koodi antaa pallon nopeuden molempiin suuntiin X -suuntaan ja Y -suuntaan samalla suuruudella, mikä saa pallon liikkumaan 45 ° kulmassa. Vaiheessa 8 lisäsimme palloon fysiikan materiaalia ja muutimme sen pomppia, mikä säilyttää pallon liikkeen pelin aikana.

Vaihe 6: Pelin viimeistely

Pelin viimeistely
Pelin viimeistely
Pelin viimeistely
Pelin viimeistely
Pelin viimeistely
Pelin viimeistely
Pelin viimeistely
Pelin viimeistely

Nyt meidän on tehtävä häviäminen mahdolliseksi, jos pelaat peliä, huomaat, että kun pallo ohittaa pelaajan 1 tai pelaajan 2, se vain pomppii rajalta, eikä se ole juuri sitä, mitä tarvitsemme pelissämme. Sen sijaan haluamme tehdä tuloslaskurin, joka laskee pisteet aina, kun pallo törmää ylä- tai alarajaan, ja nollata pallon sijainnin.

  1. Vedä ja pudota pallo hierarkiasta projektiin, olet tehnyt pallosta esivalmisteen, jotta voit käyttää sitä myöhemmin.
  2. Napsauta hiiren kakkospainikkeella hierarkiaa ja valitse Luo tyhjä. tyhjä esine tulee näkyviin, nimeä se uudelleen palloksi uudelleen ja muuta sen sijainti samaksi kuin pallon sijainti.
  3. Napsauta hiiren kakkospainikkeella hierarkiaa ja valitse Käyttöliittymä >> Teksti. Huomaa, että teksti liittyy kankaalle, tekstin sijainti pelissä riippuu tekstin sijainnista kankaalla, ei pelimme rajoissa. (Katso kuva 1).
  4. Muuta tekstin sijainti haluamaasi kohtaan.
  5. Toista vaiheet 3 ja 4 uudelleen toisen pelaajan pisteille.
  6. Kirjoita ensimmäinen teksti "Pelaajan 1 pisteet: 0" ja kirjoita toinen teksti "Pelaajan 2 pisteet: 0". (Katso kuva 2).
  7. Luo komentosarja ylärajalle nimeltä p1wins ja kopioi seuraava koodi.

Koodi:

System. Collectionsin avulla;

käyttämällä System. Collections. Generic; käyttämällä UnityEngineä; käyttämällä UnityEngine. SceneManagement; käyttämällä UnityEngine. UI; public class p1wins: MonoBehaviour {public Text score; julkinen Transform ball_respawn; julkinen GameObject -pallo; yksityinen int p1 = 0; // Aloitus kutsutaan ennen ensimmäistä kehyspäivitystä void Start () {} // Päivitys kutsutaan kerran ruutua kohti void Update () {score.text = "Player 1 Score:" + p1; } void OnCollisionEnter2D (Collision2D muu) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p1 ++; Välitön (pallo, pallon_parannus.asento, pallon_parannus.kierto); }}}

8. Vedä ja pudota pallon esivalmisteet projektista vaiheessa 1 Ball -parametriin. (Katso kuva 3)

9. Vedä ja pudota pallo, joka on muodostettu uudelleen hierarkiasta Ball-rerspawn-parametriin. (Katso kuva 3)

10. vedä ja pudota pelaajan 1 pisteet hierarkiasta Score -parametriin. (Katso kuva 3)

Koodin selitys:

Kun pallo törmää ylempään reunaan, se tuhoaa ja uudistaa uudelleen vaiheessa 2 määrittämässä ball_respawn -asennossa. Tavoitteena tehdä pallosta esivalmisteena on pystyä uudelleensijoittamaan se kaikilla ominaisuuksillaan, muuten, jos käytimme palloa hierarkiasta se palautuu uudelleen, mutta se ei liiku. Myös silloin, kun pallo törmää ylärajaan, arvo, joka alun perin on 0 ja jota kutsutaan p1, kasvaa yhdellä. Tämä arvo näytetään tekstinä, joten kun pallo törmää ylärajaan, pelaajan 1 pisteet kasvavat yhdellä.

Tee nyt vaiheet 7, 8, 9 ja 10 alarajalle

Luo vaiheeseen 7 skripti nimeltä p2wins ja kopioi seuraava koodi.

vaiheessa 10, vedä ja pudota pelaaja 2: n pisteet hierarkiasta Score -parametriin.

Koodi:

System. Collectionsin avulla;

käyttämällä System. Collections. Generic; käyttämällä UnityEngineä; käyttämällä UnityEngine. SceneManagement; käyttämällä UnityEngine. UI; public class p2wins: MonoBehaviour {public Text score; julkinen Transform ball_respawn; julkinen GameObject -pallo; yksityinen int p2 = 0; // Aloitus kutsutaan ennen ensimmäistä kehyspäivitystä void Start () {} // Päivitys kutsutaan kerran per frame void Update () {score.text = "Player 2 Score:" + p2; } void OnCollisionEnter2D (Collision2D muu) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p2 ++; Välitön (pallo, pallon_parannus.asento, pallon_parannus.kierto); }}}

Suositeltava: