Satura rādītājs:

Kā izveidot vairāku spēlētāju spēli ar Arduino kontrolieriem: 6 soļi
Kā izveidot vairāku spēlētāju spēli ar Arduino kontrolieriem: 6 soļi

Video: Kā izveidot vairāku spēlētāju spēli ar Arduino kontrolieriem: 6 soļi

Video: Kā izveidot vairāku spēlētāju spēli ar Arduino kontrolieriem: 6 soļi
Video: 35 видео со страшными призраками: мегасборник 2023 года [V1] 2024, Novembris
Anonim
Kā izveidot vairāku spēlētāju spēli ar Arduino kontrolieriem
Kā izveidot vairāku spēlētāju spēli ar Arduino kontrolieriem

Vai esat kādreiz domājuši, kā spēļu izstrādātāji rada pārsteidzošas spēles, kuras cilvēkiem patīk spēlēt visā pasaulē? Nu, šodien es jums sniegšu tikai nelielu mājienu par to, izveidojot nelielu vairāku spēlētāju spēli, kuru kontrolēs vai nu Arduino kontrolieris, kuru arī izveidosit. Tātad, sāksim darbu.

Piegādes

Jums būs nepieciešams:

  • Portatīvais dators
  • Vienotības dzinējs
  • C# IDE, kas darbojas kopā ar Unity, piemēram, vizuālo studiju vai Atom. (Es izmantošu Visual Studio kodu)
  • 2X Arduino Nano
  • 2X liels maizes dēlis
  • 2X mazs maizes dēlis
  • 4X tack slēdzis (spiedpoga)
  • 4X 200Ω rezistors
  • 12X vīriešu un vīriešu džemperu vadi
  • Arduino IDE

Tas būs noderīgi, ja jums ir pamatzināšanas par Unity lietošanu, taču tas neietekmēs jūsu progresu, jo jūs iepazīsities ar to, veidojot spēli.

Saite Unity Engine lejupielādei:

store.unity.com/download-nuo

Saite Visual Studio koda IDE lejupielādei:

code.visualstudio.com/download

Saite Arduino IDE lejupielādei:

www.arduino.cc/en/Main/Software

1. darbība: iestatiet spēles robežas

Iestatiet spēles robežas
Iestatiet spēles robežas
Iestatiet spēles robežas
Iestatiet spēles robežas
Iestatiet spēles robežas
Iestatiet spēles robežas

Pirmkārt, jums ir nepieciešams lejupielādēt vienotību

Kad tas ir izdarīts, varat sākt iestatīt spēles skatu.

Atveriet jaunu Unity projektu, nosauciet to un izvēlieties 2D spēli.

Atverot projektu, ievērojiet, ka ir 3 galvenās sadaļas

  • Hierarhija (šeit tiks pievienoti visi jūsu spēles objekti un informācija).
  • Aina (kur iestatāt spēles skatu).
  • Spēle (kur var pārbaudīt, kā noritēs īstā spēle).

Ievērojiet, ka hierarhijā atrodas jūsu aina un zem ainas ir galvenā kamera. Izvēloties kameru no hierarhijas, tā tiks atlasīta sižetā

(Viss, kas atrodas šīs kameras robežās, tiks parādīts reālajā spēlē).

Paskaties 1. attēlu

Mūsu spēle sastāv no diviem dēļiem, bumbiņas, kas pārvietojas, un robežām, kas ierobežo dēļu un bumbas kustību.

Sāksim ar robežu izveidi.

  1. Lai izveidotu jaunu spēles objektu, izvēlieties Aktīvi> Izveidot> Sprites> kvadrāts (nosauciet to par “labās un kreisās robežas”).
  2. Velciet un nometiet labās un kreisās robežas līdz hierarhijai, un ainā parādīsies kvadrāts.
  3. Pielāgojiet tā x ass pozīciju (5) “labās un kreisās robežas”> inspektors> pārveidojiet> pozīcija> X. Paskaties 3. attēlu
  4. Pēc tam noregulējiet tā mērogu, lai tas būtu pietiekami liels, lai aptvertu kameras robežas (velciet kvadrāta augšējo un apakšējo malu, lai to izstieptu).
  5. Pielāgojiet tā krāsu “no labās un kreisās malas”> inspektors> sprite render> krāsa. Paskaties 3. attēlu
  6. Ritiniet uz leju inspektorā un atlasiet Pievienot komponentu, pēc tam ierakstiet Rigidbody2D un nospiediet taustiņu Enter, tas pamatā pievienos jūsu spēles objektam fiziku, jo tas piešķir masu, smagumu un sadursmes noteikšanu. Tomēr mūsu spēlei nav vajadzīgs smagums, tāpēc gravitāciju padariet par 0. Jums būs jāiesaldē arī pozīcija un rotācija, lai robeža netiktu pārvietota sadursmes laikā. Apskatiet 4. attēlu
  7. atlasiet pievienot komponentu, pēc tam ierakstiet Box Collider 2D un nospiediet ievadīšanas taustiņu, lai ap spēles objektu tiktu pievienota zona, kurā var konstatēt sadursmes. Paskaties uz 4. attēlu
  8. Tagad atlasiet labās un kreisās robežas un nospiediet (ctrl+d), lai to dublētu.
  9. Pārdēvējiet to par “kreiso apmali” un pārdēvējiet pirmo (“labā robeža”).
  10. Izvēlieties kreiso apmali un 3. solī tādā pašā veidā noregulējiet tās x ass pozīciju uz (-5). Tagad jums ir labās un kreisās malas.

Atkārtojiet iepriekšējās 10 darbības ar augšup un lejup esošajām malām un mainiet kvadrāta y pozīciju, nevis x pozīciju. Pēdējam priekšskatījumam vajadzētu būt kaut kam līdzīgam attēlā redzamajam.

Apskatiet 5. attēlu

2. darbība. Plātņu pievienošana un kontrolieru izgatavošana

Plātņu pievienošana un kontrolieru izgatavošana
Plātņu pievienošana un kontrolieru izgatavošana
Plātņu pievienošana un kontrolieru izgatavošana
Plātņu pievienošana un kontrolieru izgatavošana
Plātņu pievienošana un kontrolieru izgatavošana
Plātņu pievienošana un kontrolieru izgatavošana

Dēļu pievienošana

Izveidojiet jaunu spēles objektu un nosauciet to par spēlētāju 1.

Pielāgot:

  • Mērogs: X (1.2), Y (0.15), Z (1)
  • Pozīcija: X (0), Y (-3,6), z (0)
  • Pievienojiet BoxCollider2D
  • Pievienojiet Rigidbody 2D un iesaldējiet y un z asis.

Dublējiet (ctrl+d) un pārdēvējiet kopēšanas atskaņotāju 2.

Pielāgot:

  • Mērogs: X (1.2), Y (0.15), Z (1)
  • Pozīcija: X (0), Y (3.6), z (0)
  • BoxCollider jau būs tur.
  • Rigidbody 2D jau būs tur, un y un z asis jau būs iesaldētas.

Paskaties 1. attēlu

Kontrolieru izgatavošana

Jums būs nepieciešams:

  • 2X Arduino Nano
  • 2X liels maizes dēlis
  • 2X mazs maizes dēlis
  • 4X tack slēdzis (spiedpoga)
  • 4X rezistors
  • 12X vīriešu un vīriešu džemperu vadi

Tagad apskatiet maizes dēļa fotoattēlus un kartēšanu, lai saliktu kursorsviras.

  1. Pievienojiet vienu Arduino Nano mikroshēmu ar nelielu maizes dēli.
  2. pievienojiet 2 tack slēdžus uz lielās maizes dēļa, kā parādīts attēlā. Centieties, lai maizes dēļa labā puse būtu simetriska kreisās puses pusē, jo tas padarīs kursorsviru labāku (jūs varat izmantot 30. kolonnu kā simetriju) līnija)
  3. Savienojiet kreisās pogas augšējo kreiso tapu ar 5V tapu Arduino uz mazā maizes dēļa (lietas, kas ir savienotas ar to pašu maizes dēļa kolonnu, ir savienotas viena ar otru).
  4. Savienojiet labās pogas augšējo labo tapu ar 5V tapu Arduino.
  5. Savienojiet kreisās pogas apakšējo labo tapu ar punktu 31. kolonnā, izmantojot rezistoru.
  6. Savienojiet labās pogas apakšējo kreiso tapu ar punktu 29. kolonnā, izmantojot rezistoru.
  7. Savienojiet rezistorus ar GND tapu Arduino.
  8. Savienojiet kreisās pogas augšējo labo tapu ar D3 tapu Arduino.
  9. Savienojiet labās pogas augšējo kreiso tapu ar D9 tapu Arduino.
  10. Tagad atkārtojiet šīs darbības un izveidojiet otro kontrolieri.

3. darbība. Arduino savienošana ar seriālo portu

Arduino savienošana ar seriālo portu
Arduino savienošana ar seriālo portu
Arduino savienošana ar seriālo portu
Arduino savienošana ar seriālo portu
Arduino savienošana ar seriālo portu
Arduino savienošana ar seriālo portu
Arduino savienošana ar seriālo portu
Arduino savienošana ar seriālo portu

Pirmkārt, jums būs jāinstalē Arduino IDE.

Kad tie ir instalēti, varat sākt, izveidojot Arduino programmu, kas saņem ievades no pogām un saglabā tās seriālajā portā (COM portā). Kad jūsu klēpjdatoram ir pievienota Arduino plate, operētājsistēma automātiski atpazīst dēli kā seriālo portu, kurā var augšupielādēt programmas. Sērijas portā saglabātās vērtības var izmantot nākamajā darbībā, kad savienojam Unity Engine ar seriālo portu.

Tagad savienosim Arduino ar seriālo portu.

Apskatīt bildes

  1. Savienojiet Arduino ar klēpjdatoru
  2. Rīki> Dēlis> Arduino Nano
  3. Ja jūsu Arduino mikroshēma ir nesen (2018-2020) Rīki> Procesors> ATmega328P (vecais sāknēšanas ielādētājs).
  4. Ja jūsu Arduino mikroshēma nav nesen (pirms 2018. gada) Rīki> Procesors> ATmega328P
  5. Rīki> Ports> COM (neatkarīgi no parādītā numura, manā gadījumā tas ir 10). * Šis ir seriālais ports, kurā tiks saglabātas vērtības.
  6. Kopējiet kodu un ielīmējiet to Arduino IDE un nospiediet ctrl+u, lai augšupielādētu programmu.
  7. Atkārtojiet ar otro Arduino. (veicot 5. darbību, noteikti izvēlieties citu COM portu, lai abi kontrolieri netiktu savienoti ar to pašu seriālo portu).

Kods:

void setup () {

Sērijas sākums (9600); pinMode (3, INPUT); // Pastāstot Arduino, lai saņemtu ievadi no pin D3 pinMode (9, INPUT); // Pasakot Arduino, lai saņemtu ievadi no pin D9} void loop () {if (digitalRead (3) == 1) { /* Ja Arduino saņem 1 Serial.write (1) ievadi; no tapas 3 Izvadiet vērtību 1 uz seriālo portu Serial.flush (); */ kavēšanās (2); } if (digitalRead (9) == 1) { /* Ja Arduino saņem 1 Serial.write (2) ievadi; no tapas 9 Izvadiet vērtību 2 uz seriālo portu Serial.flush (); */ kavēšanās (2); }}

Programmas skaidrojums:

Šis kods vienkārši ņem ievadi no D3 tapas un D9 tapas Arduino, kas ir savienotas ar pogām. Pogas ir nospiestas vai netiek nospiestas, kas nozīmē, ka no tām iegūtie rādījumi ir vai nu 1 (nospiests), vai 0 (nespiests). Ja ievade no labās pogas (no D9) ir 1 (nospiesta), seriālajā portā saglabājiet vērtību 1. Ja kreisās pogas (no D3) ievade ir 1 (nospiesta), seriālajā portā saglabājiet vērtību 2.

4. solis: Unity savienošana ar seriālo portu

Unity savienošana ar seriālo portu
Unity savienošana ar seriālo portu
Unity savienošana ar seriālo portu
Unity savienošana ar seriālo portu

Šim solim mēs identificēsim Unity sērijas portu, lai, nospiežot pogas, tas varētu saņemt ievadi no Arduino. Instalējiet Visual Studio Code savā klēpjdatorā. Pēc tam dodieties uz vienotību, atlasiet spēlētāju 1 no hierarhijas, ritiniet uz leju un atlasiet pievienot komponentu un ierakstiet player1_motion, pēc tam nospiediet taustiņu Enter. Paskaties 1. attēlu

Inspektorā tiks izveidots C# skripts, ar peles labo pogu noklikšķiniet uz tā un atlasiet rediģēt skriptu, vizuālajam studijas kodam vajadzētu atvērt un tiks parādīts noklusējuma kods, kas izskatās kā 2. attēls.

Kopējiet šādu kodu un pēc tam mainiet "SerialPort sp = new SerialPort (" COM10 ", 9600);" ar SerialPort sp = jauns SerialPort ("COM ports, kuram ir pievienots jūsu Arduino", 9600); jūs varat to atrast, atgriežoties pie sava Arduino koda un atverot rīkus> Ports> COM (neatkarīgi no parādītā numura).

Kods:

izmantojot System. Collections;

izmantojot System. Collections. Generic; izmantojot UnityEngine; izmantojot System. IO. Ports; publiskās klases player1_motion: MonoBehaviour {pludiņa ātrums = 8; privāts pludiņš amounttomove; SerialPort sp = jauns SerialPort ("COM10", 9600); // Sākums tiek izsaukts pirms pirmā kadra atjaunināšanas void Start () {sp. Open (); sp. ReadTimeout = 1; } // Atjauninājums tiek izsaukts vienu reizi kadrā void 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 (Virziens == 2) {transform. Translate (Vector3.right*amounttomove, Space. World); }}}

Koda skaidrojums:

Šis kods norāda vienotībai, lai saņemtu ievadi no seriālā porta (COM 10). Nospiežot kreiso pogu, Arduino nosūta seriālajam portam vērtību 1, ja vienotība saņem 1 no sērijas porta, spēles objektam "spēlētājs 1" kreisajā virzienā tiek pievienots ātrums. Nospiežot labo pogu, Arduino nosūta sērijas portam vērtību 2, ja vienotība no sērijas porta saņem 2, spēles objektam "spēlētājs 1" tiek pievienots ātrums pareizajā virzienā. ja seriālais ports nesaņem vērtību no seriālā porta, ātrums netiek pievienots nevienā virzienā, tāpēc plāksne paliek nekustīga.

Pēc koda nokopēšanas nospiediet F5, lai izveidotu un palaistu kodu. Atgriezieties vienotībā un nospiediet atskaņošanas pogu. Spēlētājam 1 vajadzētu pārvietoties pa labi, nospiežot pa labi, un pa kreisi, kad nospiežat pa kreisi.

Tagad veiciet tās pašas darbības vēlreiz, bet ar 2. atskaņotāju un noteikti ierakstiet “Pievienot komponentu” player2_motion, nevis player1_motion, un identificējiet otro COM portu, kuram ir pievienots otrais kontrolieris, nevis to pašu seriālo portu.

Pašā kodā jums arī būs jāmaina "publiskās klases player1_motion: MonoBehaviour" uz "public class player2_motion: MonoBehaviour".

5. solis: bumbiņas pievienošana

Bumbas pievienošana
Bumbas pievienošana
Bumbas pievienošana
Bumbas pievienošana
Bumbas pievienošana
Bumbas pievienošana
  1. Pievienojiet jaunu spēles objektu, taču šoreiz kvadrāta vietā izvēlieties apli.
  2. Pārdēvējiet to par "bumbu".
  3. Velciet un nometiet hierarhijā.
  4. Pielāgojiet skalu (X: 0,2 - Y: 0,2 - Z: 0,2).
  5. Pievienojiet 2D Rigidbody un iesaldējiet tikai Z asi.
  6. Mainiet masu uz 0,0001
  7. Mainiet gravitācijas skalu uz 0.
  8. Pievienojiet Box Collider 2D.
  9. Dodieties uz Aktīvi> Izveidot> Fizikas materiāls 2D Apskatiet 1. attēlu
  10. mainīt nosaukumu uz "atlēciens"
  11. Mainiet inspektora berzi uz nulli
  12. Mainiet inspektora atlēcienu uz 1
  13. Velciet un nometiet "atlēcienu" Rigidbody 2D> Materiāls Paskatieties 2. attēlā
  14. Vēlreiz hierarhijā atlasiet “bumba” un ejiet, lai pievienotu komponentu, ierakstiet Ball_movement un pēc tam nospiediet taustiņu Enter.
  15. Ar peles labo pogu noklikšķiniet uz skripta un atlasiet rediģēt skriptu.
  16. Nokopējiet zemāk esošo kodu un nospiediet F5, lai to izveidotu un palaistu.

Kods:

izmantojot System. Collections;

izmantojot System. Collections. Generic; izmantojot UnityEngine; public class Ball_movement: MonoBehaviour {// Sākums tiek izsaukts pirms pirmā kadra atjauninājuma private float force = 2; void Start () {StartCoroutine (move ()); } IEnumerator move () {ienesīgums atdod jaunu WaitForSeconds (2); GetComponent (). AddForce (jauns Vector2 (1f, 0,5f)*0,02f*spēks); }}

Koda skaidrojums

Šis kods dod bumbiņai ātrumu vienādā lielumā abos virzienos X virzienā un Y virzienā, kas liek bumbiņai pārvietoties 45 ° leņķī. 8. solī mēs bumbiņai pievienojām fizikas materiālu un mainījām tā atsitienu, tādējādi saglabājot bumbas kustību visā spēlē.

6. darbība: spēles pabeigšana

Spēles pabeigšana
Spēles pabeigšana
Spēles pabeigšana
Spēles pabeigšana
Spēles pabeigšana
Spēles pabeigšana
Spēles pabeigšana
Spēles pabeigšana

Tagad mums ir jāļauj zaudēt, ja jūs vadāt spēli, pamanīsit, ka tad, kad bumba iet garām spēlētājam 1 vai 2, tā vienkārši atlec no robežas, un tas nav tieši tas, kas mums vajadzīgs mūsu spēlē. Tā vietā mēs vēlamies izveidot rezultātu skaitītāju, kas saskaita rezultātu katru reizi, kad bumba saduras ar augšup vai lejup esošajām robežām, un atiestatīt bumbas stāvokli.

  1. Velciet un nometiet bumbu no hierarhijas uz projektu. Jūs esat izveidojis bumbas saliekamo elementu, lai to varētu izmantot vēlāk.
  2. Ar peles labo pogu noklikšķiniet uz hierarhijas un atlasiet Izveidot tukšu. parādīsies tukšs objekts, pārdēvēs to par bumbas atjaunošanu un mainīs tā pozīciju, lai tā būtu tāda pati kā bumbas pozīcija.
  3. Ar peles labo pogu noklikšķiniet uz hierarhijas un izvēlieties UI >> Teksts. Ņemiet vērā, ka teksts ir pievienots audeklam, teksta pozīcija spēlē ir atkarīga no teksta pozīcijas audeklā, nevis mūsu spēles robežās. (Paskaties 1. attēlu).
  4. Mainiet teksta pozīciju uz vēlamo vietu.
  5. Atkārtojiet 3. un 4. darbību, lai iegūtu otrā spēlētāja rezultātu.
  6. Ierakstiet pirmo tekstu "Spēlētāja 1 rezultāts: 0" un ievadiet otro tekstu "Spēlētāja 2 rezultāts: 0". (Apskatiet 2. attēlu).
  7. Augšējā malā izveidojiet skriptu ar nosaukumu p1wins un nokopējiet šādu kodu.

Kods:

izmantojot System. Collections;

izmantojot System. Collections. Generic; izmantojot UnityEngine; izmantojot UnityEngine. SceneManagement; izmantojot UnityEngine. UI; public class p1wins: MonoBehaviour {public Text score; public Transform ball_respawn; publiskā GameObject bumba; privāts int p1 = 0; // Sākums tiek izsaukts pirms pirmā kadra atjaunināšanas void Start () {} // Atjauninājums tiek izsaukts vienu reizi kadrā void Update () {score.text = "Spēlētāja 1 rezultāts:" + p1; } void OnCollisionEnter2D (Collision2D other) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p1 ++; Instantiate (bumba, bumbas_respawn.pozīcija, bumbas_respawn.rotācija); }}}

8. Velciet un nometiet lodītes sagatavi no projekta 1. darbībā parametrā Ball. (Paskaties 3. attēlu)

9. Velciet un nometiet bumbu, kas pārcelta no hierarhijas uz parametru Ball-rerspawn. (Paskaties 3. attēlu)

10. velciet un nometiet spēlētāja 1 rezultātu no hierarhijas uz Score parametru. (Paskaties 3. attēlu)

Koda skaidrojums:

Kad bumba saduras ar augšējo malu, tā iznīcina un atkal parādās pozīcijā ball_respawn, kuru mēs piešķīrām 2. solī. Mērķis padarīt bumbu par saliekamo elementu ir spēt to atjaunot ar visām tā funkcijām, pretējā gadījumā, ja mēs izmantojām bumbu no hierarhijas tas atjaunosies, bet nepārvietosies. Arī tad, kad bumba saduras ar augšējo robežu, vērtība, kas sākotnēji ir vienāda ar 0, ko sauc par p1, palielinās par 1. šī vērtība tiek parādīta kā teksts, tādēļ, bumbiņai saduroties ar augšējo malu, spēlētāja 1 rezultāts palielinās par 1.

Tagad veiciet 7., 8., 9. un 10. darbību apakšējai robežai

7. darbībai izveidojiet skriptu ar nosaukumu p2wins un tā vietā nokopējiet šādu kodu.

10. darbībai velciet un nometiet spēlētāja 2 rezultātu no hierarhijas uz parametra Score.

Kods:

izmantojot System. Collections;

izmantojot System. Collections. Generic; izmantojot UnityEngine; izmantojot UnityEngine. SceneManagement; izmantojot UnityEngine. UI; public class p2wins: MonoBehaviour {public Text score; public Transform ball_respawn; publiskā GameObject bumba; privāts int p2 = 0; // Sākums tiek izsaukts pirms pirmā kadra atjaunināšanas void Start () {} // Atjauninājums tiek izsaukts vienu reizi kadrā void Update () {score.text = "Spēlētāja 2 rezultāts:" + p2; } void OnCollisionEnter2D (Collision2D other) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p2 ++; Instantiate (bumba, bumbas_respawn.pozīcija, bumbas_respawn.rotācija); }}}

Ieteicams: