Përmbajtje:

Si të bëni një lojë me shumë lojtarë me kontrolluesit Arduino: 6 hapa
Si të bëni një lojë me shumë lojtarë me kontrolluesit Arduino: 6 hapa

Video: Si të bëni një lojë me shumë lojtarë me kontrolluesit Arduino: 6 hapa

Video: Si të bëni një lojë me shumë lojtarë me kontrolluesit Arduino: 6 hapa
Video: It Became Unliveable! ~ Abandoned Home Of The Spenser's In The USA 2024, Nëntor
Anonim
Si të bëni një lojë me shumë lojtarë me kontrolluesit Arduino
Si të bëni një lojë me shumë lojtarë me kontrolluesit Arduino

A keni menduar ndonjëherë se si zhvilluesit e lojërave krijojnë lojëra të mahnitshme që njerëzit në mbarë botën kënaqen duke i luajtur? Epo, sot unë do t'ju jap vetëm një aluzion të vogël në lidhje me të duke bërë një lojë të vogël multiplayer që do të kontrollohet nga një kontrollues Arduino që gjithashtu do të bëni. Pra, le të fillojmë.

Furnizimet

Do t'ju duhet:

  • Një laptop
  • Motori i Unitetit
  • Një C# IDE që punon me Unity siç është studio vizuale ose Atom. (Unë do të përdor Visual Studio Code)
  • 2X Arduino Nano
  • 2X Bordi i Bukës së Madhe
  • 2X Tabela e Bukës së Vogël
  • Ndërruesi 4x Tack (Butoni Push)
  • Rezistencë 4X 200Ω
  • Telat e kërcyesit meshkuj në meshkuj 12X
  • Arduino IDE

Do të jetë e dobishme nëse keni një kuptim bazë të përdorimit të Unitetit, megjithatë nuk do të ndikojë në përparimin tuaj pasi do të njiheni me të ndërsa vazhdoni të bëni lojën.

Lidhja për shkarkimin e Unity Engine:

store.unity.com/download-nuo

Lidhja për shkarkimin e Visual Studio Code IDE:

code.visualstudio.com/download

Lidhja për shkarkimin e Arduino IDE:

www.arduino.cc/en/Main/Software

Hapi 1: Vendosni kufijtë e lojës

Vendosni kufijtë e lojës
Vendosni kufijtë e lojës
Vendosni kufijtë e lojës
Vendosni kufijtë e lojës
Vendosni kufijtë e lojës
Vendosni kufijtë e lojës

Para së gjithash, ju duhet të shkarkoni unitetin

Pasi të bëhet kjo, mund të filloni të vendosni pamjen e lojës tuaj.

Hapni një projekt të ri Unity, emërtojeni atë dhe zgjidhni lojën 2D.

Kur hapet projekti, vini re se ka 3 seksione kryesore të quajtura

  • Hierarkia (këtu do të shtohen të gjitha objektet dhe detajet e lojës tuaj).
  • Skena (ku vendosni pamjen e lojës).
  • Lojë (ku mund të provoni se si do të shkojë loja e vërtetë).

Vini re se nën hierarkinë ekziston skena juaj dhe nën skenë ekziston "Kamera kryesore". Kur zgjidhni kamerën nga hierarkia ajo do të zgjidhet në skenë

(Çdo gjë brenda kufijve të kësaj kamere do të shfaqet në lojën e vërtetë).

Shikoni figurën 1

Loja jonë përbëhet nga dy dërrasa, një top që lëviz përreth, dhe kufij që kufizojnë lëvizjen e dërrasave dhe topit.

Le të fillojmë duke krijuar kufijtë.

  1. Për të krijuar një objekt të ri të lojës, zgjidhni Asetet> Krijo> Sprites> katror (emërtojeni atë "kufijtë e djathtë dhe të majtë") Shikoni foton 2
  2. Zvarritni dhe lëshoni kufijtë e djathtë dhe të majtë në hierarki dhe një shesh do të shfaqet në skenë.
  3. Rregulloni pozicionin e tij të boshtit x në (5) "kufijtë e djathtë dhe të majtë"> inspektori> transformimi> pozicioni> X. Shikoni foton 3
  4. Pastaj rregulloni shkallën e saj aq të madhe sa të mbulojë kufijtë e kamerës (tërhiqni anët e sipërme dhe të poshtme të sheshit për ta shtrirë atë).
  5. Rregulloni ngjyrën e tij "nga kufijtë e djathtë dhe të majtë"> inspektori> sprite render> ngjyra. Shikoni foton 3
  6. Shkoni poshtë te inspektori dhe zgjidhni shtoni komponentin, pastaj shkruani Rigidbody2D dhe shtypni enter, kjo në thelb do të shtojë fizikë në objektin tuaj të lojës pasi i jep atij masën, gravitetin dhe zbulimin e përplasjes. Sidoqoftë, ne nuk kemi nevojë për gravitetin në lojën tonë, kështu që bëni gravitetin 0 në vend të kësaj 1. Ju gjithashtu do të duhet të ngrini pozicionin dhe rrotullimin në mënyrë që kufiri të mos lëvizë kur përplaset. Shikoni foton 4
  7. zgjidhni shtoni komponentin pastaj shtypni Box Collider 2D dhe shtypni enter kjo do të shtojë një zonë rreth objektit të lojës ku mund të zbulohen përplasjet. Shikoni foton 4
  8. Tani zgjidhni kufijtë e djathtë dhe të majtë dhe shtypni (ctrl+d) për ta kopjuar atë.
  9. Riemërtojeni atë "kufiri i majtë" dhe riemëroni të parin ("kufiri i djathtë").
  10. Zgjidhni kufirin e majtë dhe rregulloni pozicionin e tij të boshtit x në (-5) me të njëjtën mënyrë në hapin 3. Tani keni kufijtë e djathtë dhe të majtë.

Përsëritni 10 hapat e mëparshëm me kufijtë lart e poshtë dhe ndryshoni pozicionin y të sheshit në vend të pozicionit x. Paraqitja përfundimtare duhet të jetë diçka e ngjashme me atë në figurë.

Shikoni figurën 5

Hapi 2: Shtimi i bordeve dhe krijimi i kontrolluesve

Shtimi i bordeve dhe krijimi i kontrolluesve
Shtimi i bordeve dhe krijimi i kontrolluesve
Shtimi i bordeve dhe krijimi i kontrolluesve
Shtimi i bordeve dhe krijimi i kontrolluesve
Shtimi i bordeve dhe krijimi i kontrolluesve
Shtimi i bordeve dhe krijimi i kontrolluesve

Shtimi i bordeve

Krijoni një objekt të ri të lojës dhe emërtojeni atë lojtar 1.

Rregullo:

  • Shkalla: X (1.2), Y (0.15), Z (1)
  • Pozicioni: X (0), Y (-3.6), z (0)
  • Shtoni BoxCollider2D
  • Shtoni Rigidbody 2D dhe ngrini akset y dhe z.

Kopjoni (ctrl+d) dhe riemëroni kopjuesin 2.

Rregullo:

  • Shkalla: X (1.2), Y (0.15), Z (1)
  • Pozicioni: X (0), Y (3.6), z (0)
  • Një BoxCollider do të jetë tashmë atje.
  • Një Rigidbody 2D tashmë do të jetë atje dhe akset y dhe z do të jenë tashmë të ngrira.

Shikoni figurën 1

Krijimi i kontrolluesve

Do t'ju duhet:

  • 2X Arduino Nano
  • 2X Bordi i Bukës së Madhe
  • 2X Tabela e Bukës së Vogël
  • Ndërruesi 4x Tack (Butoni Push)
  • Rezistencë 4X
  • Telat e kërcyesit meshkuj në meshkuj 12X

Tani shikoni fotot dhe hartat e tabelës së bukës për të mbledhur levë.

  1. Bashkangjitni një çip Arduino Nano me një dërrasë të vogël bukë.
  2. bashkëngjitni 2 çelësa të kapëses në tabelën e madhe të bukës siç tregohet në figurë. Mundohuni ta mbani anën e djathtë të tabelës së bukës simetrike me dorën e majtë pasi kjo do ta bëjë xhojstikun të duket më mirë (Ju mund të përdorni kolonën e 30 -të si simetri linjë)
  3. Lidhni kunjin e sipërm të majtë të butonit të majtë me kunjin 5V në Arduino në tabelën e vogël të bukës (gjërat që lidhen me të njëjtën kolonë në pjatën e bukës janë të lidhura me njëra-tjetrën).
  4. Lidhni kunjin e sipërm të djathtë të butonit të djathtë me pin 5V në Arduino.
  5. Lidhni kunjin e poshtëm të djathtë të butonit të majtë me një pikë në kolonën e 31 duke përdorur një rezistencë.
  6. Lidhni kunjin e poshtëm të majtë të butonit të djathtë me një pikë në kolonën e 29-të duke përdorur një rezistencë.
  7. Lidhni rezistencat me kunjin GND në Arduino.
  8. Lidhni kunjin e sipërm të djathtë të butonit të majtë me pinin D3 në Arduino.
  9. Lidhni kunjin e sipërm të majtë të butonit të djathtë me kunjin D9 në Arduino.
  10. Tani përsëritni këto hapa dhe bëni kontrolluesin e dytë.

Hapi 3: Lidhja e Arduino me Portin Serial

Lidhja e Arduino me Portin Serial
Lidhja e Arduino me Portin Serial
Lidhja e Arduino me Portin Serial
Lidhja e Arduino me Portin Serial
Lidhja e Arduino me Portin Serial
Lidhja e Arduino me Portin Serial
Lidhja e Arduino me Portin Serial
Lidhja e Arduino me Portin Serial

Së pari do t'ju duhet të instaloni Arduino IDE.

Pasi të jenë instaluar, mund të filloni duke bërë një program Arduino që merr hyrje nga butonat dhe i ruani ato në një port Serial (porta COM). Kur një bord Arduino është i lidhur me laptopin tuaj, sistemi operativ e njeh automatikisht bordin si një port serial, në të cilin programet mund të ngarkohen. Vlerat e ruajtura në portin serik mund të përdoren në hapin tjetër kur lidhim Unity Engine me portën serike.

Tani le ta lidhim Arduino me portin Serial.

Shiko pikturat

  1. Lidhni një Arduino me laptopin tuaj
  2. Mjetet> Bordi> Arduino Nano
  3. Nëse çipi juaj Arduino është i fundit (2018-2020) Mjetet> Përpunuesi> ATmega328P (Ngarkuesi i vjetër i vjetër).
  4. Nëse çipi juaj Arduino nuk është i fundit (para vitit 2018) Mjetet> Përpunuesi> ATmega328P
  5. Mjetet> Porti> COM (çfarëdo numri të shfaqet, në rastin tim është 10). * Ky është porti serik ku do të ruhen vlerat.
  6. Kopjoni kodin dhe ngjiteni në Arduino IDE dhe shtypni ctrl+u për të ngarkuar programin.
  7. Përsëriteni me Arduino -n e dytë. (kur bëni hapin 5 sigurohuni që të zgjidhni një port tjetër COM në mënyrë që të dy kontrolluesit të mos lidhen me të njëjtën port serial).

Kodi:

void setup () {

Serial.filloj (9600); pinMode (3, INPUT); // Tregimi i Arduino për të marrë një hyrje nga pin D3 pinMode (9, INPUT); // T'i thuash Arduino -s të marrë një hyrje nga pin D9} loop void () {if (digitalRead (3) == 1) { /* Nëse Arduino merr një hyrje prej 1 Serial.shkruaj (1); nga pin 3 Dalja e një vlere prej 1 në portin serik Serial.flush (); */ vonesë (2); } if (digitalRead (9) == 1) { /* Nëse Arduino merr një hyrje prej 1 Serial.shkruaj (2); nga pin 9 Dalja e një vlere prej 2 në portin serik Serial.flush (); */ vonesë (2); }}

Shpjegimi i programit:

Ky kod thjesht merr një hyrje nga kunja D3 dhe kunja D9 në Arduino, të cilat janë të lidhura me butonat. Butonat janë ose të shtypur ose të pa shtypur, që do të thotë se leximet që merren prej tyre janë ose 1 (të shtypur) ose 0 (të pa shtypur). Nëse hyrja nga butoni i djathtë (nga D9) është 1 (shtypur) ruani një vlerë 1 në portin Serial. Nëse hyrja nga butoni i majtë (nga D3) është 1 (shtypur) ruani një vlerë 2 në portin Serial.

Hapi 4: Lidhja e Unitetit me Portën Seriale

Lidhja e Unitetit me Portin Serial
Lidhja e Unitetit me Portin Serial
Lidhja e Unitetit me Portin Serial
Lidhja e Unitetit me Portin Serial

Për këtë hap ne do të identifikojmë portin serik në Unity në mënyrë që të mund të marrë hyrjet nga Arduino kur shtypen butonat. Instaloni Visual Studio Code në laptopin tuaj. Pastaj shkoni te Uniteti, zgjidhni lojtarin 1 nga hierarkia, lëvizni poshtë dhe zgjidhni shtoni komponentin dhe shkruani player1_motion pastaj shtypni enter. Shikoni figurën 1

Një skenar C# do të krijohet në inspektor, klikoni me të djathtën mbi të dhe zgjidhni redaktoni skriptin, kodi vizual i studios duhet të hapet dhe do të tregojë një kod të paracaktuar që duket si fotografia 2.

Kopjoni kodin e mëposhtëm pastaj ndryshoni "SerialPort sp = SerialPort i ri (" COM10 ", 9600);" me SerialPort sp = SerialPort i ri ("porta COM me të cilën është lidhur Arduino juaj", 9600); mund ta gjeni duke u kthyer në kodin tuaj Arduino dhe duke përdorur Mjete> Port> COM (çfarëdo numri që shfaqet).

Kodi:

duke përdorur System. Collection;

duke përdorur System. Collections. Generic; duke përdorur UnityEngine; duke përdorur System. IO. Ports; player i klasës publike1_motion: MonoBehaviour {shpejtësia e notimit = 8; sasi private noti lëvizëse; SerialPort sp = SerialPort i ri ("COM10", 9600); // Start quhet para përditësimit të parë të kornizës void Start () {sp. Open (); sp. ReadTimeout = 1; } // Përditësimi quhet një herë për kuadër të pavlefshëm Update () {amounttomove = shpejtësia*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 (Drejtimi == 2) {transform. Translate (Vector3.right*amounttomove, Space. World); }}}

Shpjegimi i Kodit:

Ky kod i thotë unitetit të marrë hyrje nga porti serik (COM 10). Kur shtypet butoni i majtë, Arduino dërgon një vlerë 1 në portin serik, nëse uniteti merr 1 nga porti serik, një shpejtësi i shtohet objektit të lojës "player 1" në drejtimin e majtë. Kur shtypet butoni i djathtë, Arduino dërgon një vlerë 2 në portin serik, nëse uniteti merr 2 nga porti serik, një shpejtësi i shtohet objektit të lojës "player 1" në drejtimin e duhur. nëse porti serik nuk merr një vlerë nga porti serik, asnjë shpejtësi nuk shtohet në asnjë drejtim, prandaj bordi qëndron i palëvizshëm.

Pasi të kopjoni kodin shtypni F5 për të ndërtuar dhe ekzekutuar kodin. Kthehuni te uniteti dhe shtypni butonin e luajtjes, lojtari 1 duhet të lëvizë djathtas kur shtypni djathtas dhe majtas kur shtypni majtas.

Tani, bëni të njëjtat hapa edhe një herë, por me lojtarin 2 dhe sigurohuni që të shkruani në 'Shto komponentin' player2_motion në vend të player1_motion dhe të identifikoni portën e dytë COM me të cilën është lidhur kontrolluesi i dytë, jo të njëjtin port serial.

Ju gjithashtu do të duhet të ndryshoni "public class player1_motion: MonoBehaviour" në "public class player2_motion: MonoBehaviour" në vetë kodin.

Hapi 5: Shtimi i Topit

Shtimi i Topit
Shtimi i Topit
Shtimi i Topit
Shtimi i Topit
Shtimi i Topit
Shtimi i Topit
  1. Shtoni një objekt të ri të lojës, por këtë herë zgjidhni një rreth në vend të katrorit.
  2. Riemërtojeni atë "top".
  3. Zvarrit dhe lësho në hierarki.
  4. Rregulloni shkallën (X: 0.2 - Y: 0.2 - Z: 0.2).
  5. Shtoni një Rigidbody 2D dhe ngrini vetëm boshtin Z.
  6. Ndryshoni masën në 0.0001
  7. Ndryshoni shkallën e gravitetit në 0.
  8. Shtoni një Collider Box 2D.
  9. Shkoni te Asetet> Krijoni> Material fizik 2D Shikoni figurën 1
  10. ndryshoni emrin e tij në "kërcej"
  11. Ndryshoni fërkimin në zero nga inspektori
  12. Ndryshoni bounciness në 1 nga inspektori
  13. Zvarritni dhe lëshoni "kërcej" në Rigidbody 2D> Material Shikoni figurën 2
  14. Zgjidhni "topin" përsëri nga hierarkia dhe shkoni për të shtuar përbërësin dhe shkruani Ball_movement pastaj shtypni enter.
  15. Klikoni me të djathtën mbi skenarin dhe zgjidhni redaktimin e skenarit.
  16. Kopjoni kodin më poshtë dhe shtypni F5 për ta ndërtuar dhe ekzekutuar atë.

Kodi:

duke përdorur System. Collection;

duke përdorur System. Collections. Generic; duke përdorur UnityEngine; klasa publike Ball_movement: MonoBehaviour {// Fillimi thirret para përditësimit të kornizës së parë force float private = 2; void Start () {StartCoroutine (move ()); } IEnumerator move () {rendimenti ktheni WaitForSeconds të reja (2); GetComponent (). AddForce (vektori i ri2 (1f, 0.5f)*0.02f*forcë); }}

Shpjegimi i kodit

Ky kod i jep topit një shpejtësi në të dy drejtimet drejtimin X dhe drejtimin Y me të njëjtën madhësi, gjë që e bën topin të lëvizë në një kënd prej 45 °. Në hapin 8 ne shtuam një material fizik në top dhe ndryshuam shkëlqimin e tij, kjo ruan lëvizjen e topit gjatë lojës.

Hapi 6: Përfundimi i lojës

Përfundimi i lojës
Përfundimi i lojës
Përfundimi i lojës
Përfundimi i lojës
Përfundimi i lojës
Përfundimi i lojës
Përfundimi i lojës
Përfundimi i lojës

Tani duhet të bëjmë të mundur humbjen, nëse e drejtoni lojën do të vini re se kur topi kalon lojtarin 1 ose lojtarin 2, ai vetëm kërcen jashtë kufirit dhe kjo nuk është pikërisht ajo që na nevojitet në lojën tonë. Në vend të kësaj ne duam të bëjmë një numërues të rezultateve që numëron rezultatin sa herë që topi përplaset me kufijtë lart ose poshtë dhe të rivendosim pozicionin e topit.

  1. Zvarritni dhe hidhni topin nga Hierarkia në Projekt, Ju keni bërë një parafjalë të topit në mënyrë që ta përdorni më vonë.
  2. Klikoni me të djathtën mbi Hierarkinë dhe zgjidhni Krijo bosh. do të shfaqet një Objekt i zbrazët, do ta riemërojë atë në shpatullim të topit dhe do të ndryshojë pozicionin e tij për të qenë i njëjtë me pozicionin e topit.
  3. Klikoni me të djathtën mbi hierarkinë dhe zgjidhni UI >> Text. Vini re se teksti shoqëron një kanavacë, pozicioni i tekstit në lojë varet nga pozicioni i tekstit në kanavacë, jo në kufijtë e lojës sonë. (Shikoni figurën 1).
  4. Ndryshoni pozicionin e tekstit kudo që dëshironi të jetë.
  5. Përsëritni hapat 3 dhe 4 përsëri për rezultatin e lojtarit të dytë.
  6. Shkruani tekstin e parë "Player 1 Score: 0" dhe shkruani në tekstin e dytë "Player 2 Score: 0". (Shikoni figurën 2).
  7. Krijoni një skript në kufirin lart të quajtur p1wins dhe kopjoni kodin e mëposhtëm.

Kodi:

duke përdorur System. Collection;

duke përdorur System. Collections. Generic; duke përdorur UnityEngine; duke përdorur UnityEngine. SceneManagement; duke përdorur UnityEngine. UI; klasa publike p1 fiton: MonoBehaviour {rezultati i tekstit publik; public Transform ball_respawn; top publik GameObject; int int p1 = 0; // Fillimi thirret para përditësimit të parë të kornizës pavlefshme Fillimi () {} // Përditësimi quhet një herë për void kornizë Përditësimi () {score.text = "Nota e Lojtarit 1:" + p1; } void OnCollisionEnter2D (Përplasja2D tjetër) {nëse (other.gameObject.tag == "Top") {Shkatërroni (other.gameObject); p1 ++; Instantiate (top, ball_respawn.pozicion, ball_respawn.rotation); }}}

8. Tërhiqni dhe hidhni parafjalën e topit nga projekti në hapin 1 në parametrin Ball. (Shikoni foton 3)

9. Tërhiqni dhe lëshoni topin e rihapur nga hierarkia në parametrin Ball-rerspawn. (Shikoni foton 3)

10. drag and drop player 1 rezultat nga hierarkia në parametrin Score. (Shikoni foton 3)

Shpjegimi i Kodit:

Kur topi përplaset me kufirin e sipërm ai shkatërrohet dhe rilind përsëri në pozicionin e topit_përsëritjes që caktuam në hapin 2. qëllimi për ta bërë topin një parafabrikim është që të jemi në gjendje ta rimarrim atë me të gjitha tiparet e tij, përndryshe, nëse e përdorim topin nga hierarkia do të rishfaqet por nuk do të lëvizë. Gjithashtu kur topi përplaset me kufirin e sipërm një vlerë që është e barabartë me 0 e quajtur p1 rritet me 1. kjo vlerë shfaqet si tekst kështu që kur topi përplaset me kufirin e sipërm rezultati për lojtarin 1 rritet me 1.

Tani bëni hapat 7, 8, 9 dhe 10 për kufirin poshtë

për hapin 7, krijoni një skript të quajtur p2wins dhe kopjoni kodin e mëposhtëm në vend.

për hapin 10, tërhiqni dhe lëshoni rezultatin e lojtarit 2 nga hierarkia në parametrin Score.

Kodi:

duke përdorur System. Collection;

duke përdorur System. Collections. Generic; duke përdorur UnityEngine; duke përdorur UnityEngine. SceneManagement; duke përdorur UnityEngine. UI; klasa publike p2 fiton: MonoBehaviour {public Text score; public Transform ball_respawn; top publik GameObject; int int p2 = 0; // Fillimi thirret para përditësimit të parë të kornizës pavlefshme Fillimi () {} // Përditësimi quhet një herë për void kornizë Përditësimi () {score.text = "Vlerësimi i Lojtarit 2:" + p2; } void OnCollisionEnter2D (Përplasja2D tjetër) {nëse (other.gameObject.tag == "Top") {Shkatërroni (other.gameObject); p2 ++; Instantiate (top, ball_respawn.pozicion, ball_respawn.rotation); }}}

Recommended: