Sadržaj:

Kako napraviti igru za više igrača s Arduino kontrolerima: 6 koraka
Kako napraviti igru za više igrača s Arduino kontrolerima: 6 koraka

Video: Kako napraviti igru za više igrača s Arduino kontrolerima: 6 koraka

Video: Kako napraviti igru za više igrača s Arduino kontrolerima: 6 koraka
Video: Как заработать $ 90,00 в день с нулевыми деньгами на старт... 2024, Juli
Anonim
Kako napraviti igru za više igrača s Arduino kontrolerima
Kako napraviti igru za više igrača s Arduino kontrolerima

Jeste li se ikada zapitali kako programeri igara stvaraju nevjerojatne igre koje ljudi širom svijeta uživaju igrati? Pa, danas ću vam dati samo mali nagovještaj o tome tako što ćete napraviti malu igru za više igrača kojom će upravljati Arduino kontroler koji ćete i sami napraviti. Dakle, počnimo.

Supplies

Trebat će vam:

  • A Laptop
  • Unity Engine
  • C# IDE koji radi sa Unity -om, poput vizuelnog studija ili Atoma. (Koristit ću Visual Studio Code)
  • 2X Arduino Nano
  • 2X Velika ploča za hleb
  • 2X Mala ploča za hleb
  • 4X Tack prekidač (dugme)
  • 4X 200Ω otpornik
  • 12X muške na muške spojnice
  • Arduino IDE

Bit će vam od pomoći ako imate osnovno razumijevanje korištenja Unityja, međutim to neće utjecati na vaš napredak jer ćete se s time upoznati tijekom nastajanja igre.

Link za preuzimanje Unity Engine -a:

store.unity.com/download-nuo

Link za preuzimanje Visual Studio Code IDE:

code.visualstudio.com/download

Link za preuzimanje Arduino IDE -a:

www.arduino.cc/en/Main/Software

Korak 1: Postavite granice igre

Postavite granice igre
Postavite granice igre
Postavite granice igre
Postavite granice igre
Postavite granice igre
Postavite granice igre

Prije svega, morate preuzeti Unity

Kada to učinite, možete početi postavljati prikaz igre.

Otvorite novi Unity projekt, dajte mu ime i odaberite 2D igra.

Kada se projekt otvori, primijetite da postoje 3 glavna odjeljka koja se zovu

  • Hijerarhija (ovdje će se dodati svi vaši objekti i detalji igre).
  • Scena (gdje postavljate prikaz igre).
  • Igra (gdje možete testirati kako će izgledati prava igra).

Primijetite da ispod hijerarhije postoji vaša scena, a ispod scene „Glavna kamera“. Kad odaberete kameru iz hijerarhije, bit će odabrana u sceni

(Sve u granicama ove kamere će se pokazati u stvarnoj igri).

Pogledajte sliku 1

Naša igra sastoji se od dvije daske, loptice koja se kreće i granica koje ograničavaju kretanje dasaka i lopte.

Počnimo stvaranjem granica.

  1. Da biste stvorili novi objekt igre, odaberite Sredstva> Kreiraj> Duhovi> kvadrat (nazovite ga “desna i lijeva granica”) Pogledajte sliku 2
  2. Povucite i ispustite desnu i lijevu granicu do hijerarhije i kvadrat će se pojaviti u sceni.
  3. Podesite položaj njegove osi x na (5) "desna i lijeva granica"> inspektor> transformiraj> položaj> X. Pogledajte sliku 3
  4. Zatim prilagodite njegovu ljestvicu tako da bude dovoljno velika da pokrije granice kamere (povucite gornju i donju stranu kvadrata da je rastegnete).
  5. Podesite njegovu boju “s desne i lijeve ivice”> inspektor> iscrtavanje spriteta> boju. Pogledajte sliku 3
  6. Pomaknite se prema dolje u inspektoru i odaberite dodavanje komponente, zatim upišite Rigidbody2D i pritisnite enter, to će u osnovi dodati fiziku vašem objektu igre jer mu daje masu, gravitaciju i detekciju sudara. Međutim, ne treba nam gravitacija u našoj igri, pa učinite gravitaciju 0 umjesto 1. Također ćete morati zamrznuti položaj i rotaciju kako se granica ne bi pomjerila pri sudaru. Pogledajte sliku 4
  7. odaberite dodavanje komponente, zatim upišite Box Collider 2D i pritisnite enter. Ovo će dodati područje oko objekta igre gdje se mogu otkriti sudari. Pogledajte sliku 4
  8. Sada odaberite desnu i lijevu granicu i pritisnite (ctrl+d) da biste ih duplicirali.
  9. Preimenujte ga u „lijevu granicu“i preimenujte prvu („desna ivica“).
  10. Odaberite lijevu granicu i podesite njen položaj x osi na (-5) na isti način u koraku 3. Sada imate desnu i lijevu granicu.

Ponovite prethodnih 10 koraka s granicama gore i dolje i promijenite položaj y kvadrata umjesto položaja x. Konačni pregled bi trebao biti nešto slično onom na slici.

Pogledajte sliku 5

Korak 2: Dodavanje ploča i izrada kontrolera

Dodavanje ploča i izrada kontrolera
Dodavanje ploča i izrada kontrolera
Dodavanje ploča i izrada kontrolera
Dodavanje ploča i izrada kontrolera
Dodavanje ploča i izrada kontrolera
Dodavanje ploča i izrada kontrolera

Dodavanje ploča

Napravite novi objekt igre i dajte mu ime igrač 1.

Podesite:

  • Skala: X (1.2), Y (0.15), Z (1)
  • Pozicija: X (0), Y (-3,6), z (0)
  • Dodaj BoxCollider2D
  • Dodajte Rigidbody 2D i zamrznite osi y i z.

Duplirajte (ctrl+d) i preimenujte uređaj za kopiranje 2.

Podesite:

  • Skala: X (1.2), Y (0.15), Z (1)
  • Pozicija: X (0), Y (3.6), z (0)
  • BoxCollider će već biti tamo.
  • Rigidbody 2D će već biti tamo, a osi y i z će već biti zamrznute.

Pogledajte sliku 1

Izrada kontrolera

Trebat će vam:

  • 2X Arduino Nano
  • 2X Velika ploča za hleb
  • 2X Mala ploča za hleb
  • 4X Tack prekidač (dugme)
  • 4X otpornik
  • 12X muške na muške spojnice

Sada pogledajte fotografije i kartiranje krušne ploče kako biste sastavili upravljačke palice.

  1. Pričvrstite jedan Arduino Nano čip s malom pločom za kruh.
  2. pričvrstite 2 prekidača Tack na veliku ploču za kruh kao što je prikazano na slici. Pokušajte desnu stranu ploče za kruh držati simetrično u odnosu na lijevu jer će tako upravljačka palica izgledati bolje (30. kolonu možete koristiti kao simetriju linija)
  3. Spojite gornji lijevi pin lijevog dugmeta sa iglom od 5 V u Arduinu na maloj ploči za kruh (stvari koje su povezane s istim stupom na ploči za povezivanje povezane su jedna s drugom).
  4. Spojite gornji desni pin desnog gumba s 5V iglom u Arduinu.
  5. Spojite donji desni zatik lijevog dugmeta s točkom u 31. koloni pomoću otpornika.
  6. Spojite donji lijevi pin desnog gumba s točkom na 29. koloni pomoću otpornika.
  7. Spojite otpornike s GND pinom u Arduinu.
  8. Spojite gornji desni pin lijeve tipke s D3 iglom u Arduinu.
  9. Spojite gornji lijevi pin desnog gumba s pinom D9 u Arduinu.
  10. Sada ponovite ove korake i napravite drugi regulator.

Korak 3: Povezivanje Arduina sa serijskim portom

Povezivanje Arduina sa serijskim portom
Povezivanje Arduina sa serijskim portom
Povezivanje Arduina sa serijskim portom
Povezivanje Arduina sa serijskim portom
Povezivanje Arduina sa serijskim portom
Povezivanje Arduina sa serijskim portom
Povezivanje Arduina sa serijskim portom
Povezivanje Arduina sa serijskim portom

Prvo ćete morati instalirati Arduino IDE.

Nakon što su instalirani, možete početi s izradom Arduino programa koji prima ulaze s gumba i pohranjuje ih u serijski port (COM port). Kada je Arduino ploča povezana s vašim prijenosnim računarom, operativni sistem automatski prepoznaje ploču kao serijski port na koji se programi mogu učitati. Vrijednosti pohranjene u serijskom portu mogu se koristiti u sljedećem koraku kada povežemo Unity Engine sa serijskim portom.

Sada spojimo Arduino sa serijskim portom.

Pogledajte slike

  1. Povežite Arduino sa svojim laptopom
  2. Alati> Ploče> Arduino Nano
  3. Ako je vaš Arduino čip noviji (2018-2020) Alati> Procesor> ATmega328P (stari pokretač za pokretanje).
  4. Ako vaš Arduino čip nije noviji (prije 2018.) Alati> Procesor> ATmega328P
  5. Alati> Port> COM (koji god se broj pojavio, u mom slučaju to je 10). * Ovo je serijski port na kojem će biti pohranjene vrijednosti.
  6. Kopirajte kôd i zalijepite ga u Arduino IDE i pritisnite ctrl+u da biste učitali program.
  7. Ponovite s drugim Arduinom. (kada radite korak 5, obavezno odaberite drugi COM port tako da oba kontrolera neće biti povezana na isti serijski port).

Šifra:

void setup () {

Serial.begin (9600); pinMode (3, INPUT); // Reći Arduinu da prima ulaz sa pina D3 pinMode (9, INPUT); // Reći Arduinu da primi ulaz sa pina D9} void loop () {if (digitalRead (3) == 1) { /* Ako Arduino primi ulaz od 1 Serial.write (1); sa pina 3 Iznesite vrijednost 1 na serijski port Serial.flush (); */ odgoda (2); } if (digitalRead (9) == 1) { /* Ako Arduino primi ulaz od 1 Serial.write (2); sa pina 9 Iznesite vrijednost 2 na serijski port Serial.flush (); */ odgoda (2); }}

Objašnjenje programa:

Ovaj kôd jednostavno uzima ulaz sa D3 pina i D9 pina u Arduinu, koji su povezani s gumbima. Dugmad su pritisnuta ili pritisnuta, što znači da su očitavanja koja su sa njih uzeta ili 1 (pritisnuto) ili 0 (bez pritiska). Ako je ulaz s desne tipke (iz D9) 1 (pritisnut), pohranite vrijednost 1 u serijski port. Ako je ulaz s lijeve tipke (iz D3) 1 (pritisnut), pohranite vrijednost 2 u serijski port.

Korak 4: Povezivanje Unity -a sa serijskim portom

Povezivanje Unity -a sa serijskim portom
Povezivanje Unity -a sa serijskim portom
Povezivanje Unity -a sa serijskim portom
Povezivanje Unity -a sa serijskim portom

Za ovaj korak identificirat ćemo serijski port u Unityju kako bi mogao primati ulaze iz Arduina kada se pritisnu tipke. Instalirajte Visual Studio Code na prijenosno računalo. Zatim idite na Unity, odaberite igrača 1 iz hijerarhije, pomaknite se prema dolje i odaberite dodavanje komponente i upišite player1_motion, a zatim pritisnite enter. Pogledajte sliku 1

U inspektoru će se stvoriti C# skripta, desnom tipkom miša kliknite na nju i odaberite uređivanje skripte, vizualni kôd studija trebao bi se otvoriti i pokazat će zadani kôd koji izgleda kao slika 2.

Kopirajte sljedeći kod, a zatim promijenite "SerialPort sp = novi SerialPort (" COM10 ", 9600);" sa SerialPort sp = novi SerialPort ("COM port na koji je povezan vaš Arduino", 9600); možete ga pronaći ako se vratite na svoj Arduino kôd i otvorite Alati> Port> COM (koji god se broj pojavio).

Šifra:

pomoću System. Collections;

pomoću System. Collections. Generic; koristeći UnityEngine; pomoću System. IO. Ports; igrač javne klase1_motion: MonoBehaviour {float speed = 8; private float amounttomove; SerialPort sp = novi SerialPort ("COM10", 9600); // Start se poziva prije prvog ažuriranja okvira void Start () {sp. Open (); sp. ReadTimeout = 1; } // Ažuriranje se poziva jednom po okviru void Update () {amounttomove = speed*0.01f; if (sp. IsOpen) {probaj {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); }}}

Objašnjenje koda:

Ovaj kod govori jedinici da prima ulaze sa serijskog porta (COM 10). Kada se pritisne lijevo dugme, Arduino šalje vrijednost 1 na serijski port, ako jedinica primi 1 sa serijskog porta, objektu za igru "igrač 1" dodaje se brzina u lijevom smjeru. Kada se pritisne desno dugme, Arduino šalje vrijednost 2 na serijski port, ako jedinica primi 2 sa serijskog porta, objektu za igru "igrač 1" dodaje se brzina u pravom smjeru. ako serijski port ne primi vrijednost sa serijskog porta, brzina se ne dodaje ni u jednom smjeru, stoga ploča ostaje nepomična.

Nakon što kopirate kôd, pritisnite F5 da biste izgradili i pokrenuli kôd. Vratite se jedinstvu i pritisnite dugme za reprodukciju, igrač 1 bi trebao krenuti udesno kada pritisnete desno i lijevo kada pritisnete lijevo.

Sada učinite iste korake još jednom, ali s playerom 2 i obavezno upišite 'Add component' player2_motion umjesto player1_motion i identificirajte drugi COM port na koji je povezan drugi kontroler, a ne isti serijski port.

Također ćete morati promijeniti "public class player1_motion: MonoBehaviour" u "public class player2_motion: MonoBehaviour" u samom kodu.

Korak 5: Dodavanje lopte

Dodavanje lopte
Dodavanje lopte
Dodavanje lopte
Dodavanje lopte
Dodavanje lopte
Dodavanje lopte
  1. Dodajte novi objekt igre, ali ovaj put odaberite krug umjesto kvadrata.
  2. Preimenujte ga u "loptu".
  3. Povucite i ispustite hijerarhiju.
  4. Podesite skalu (X: 0,2 - Y: 0,2 - Z: 0,2).
  5. Dodajte 2D tvrdo tijelo i zamrznite samo os Z.
  6. Promijenite masu na 0,0001
  7. Promijenite skalu gravitacije na 0.
  8. Dodajte Box Collider 2D.
  9. Idite na Snimci> Kreiraj> Fizički materijal 2D Pogledajte sliku 1
  10. promijenite ime u "bounce"
  11. Promijenite trenje na nulu od inspektora
  12. Promijenite bounciness na 1 od inspektora
  13. Povucite i ispustite "odskočiti" u Rigidbody 2D> Materijal Pogledajte sliku 2
  14. Ponovo odaberite "loptu" iz hijerarhije i idite na dodavanje komponente i upišite Ball_movement, a zatim pritisnite enter.
  15. Desnim klikom na skriptu odaberite uređivanje skripte.
  16. Kopirajte donji kôd i pritisnite F5 da biste ga izgradili i pokrenuli.

Šifra:

pomoću System. Collections;

pomoću System. Collections. Generic; koristeći UnityEngine; javna klasa Ball_movement: MonoBehaviour {// Start se poziva prije prvog ažuriranja okvira private float force = 2; void Start () {StartCoroutine (move ()); } IEnumerator move () {yield return new WaitForSeconds (2); GetComponent (). AddForce (novi Vector2 (1f, 0.5f)*0.02f*force); }}

Objašnjenje koda

Ovaj kod daje lopti brzinu u oba smjera u smjeru X i smjeru Y iste veličine, zbog čega se lopta kreće pod kutom od 45 °. U koraku 8 smo dodali fizički materijal lopti i promijenili njezinu poskočnost, čime se održava kretanje lopte kroz igru.

Korak 6: Dovršavanje igre

Završavanje igre
Završavanje igre
Završavanje igre
Završavanje igre
Završavanje igre
Završavanje igre
Završavanje igre
Završavanje igre

Sada moramo omogućiti gubitak, ako pokrenete igru primijetit ćete da kada lopta prođe igrača 1 ili igrača 2 ona se samo odbije od granice, a to nije baš ono što nam treba u igri. Umjesto toga, želimo napraviti brojač rezultata koji broji rezultat svaki put kada se lopta sudari sa granicama prema gore ili prema dolje i resetirati položaj lopte.

  1. Povucite i ispustite loptu iz Hijerarhije u Project. Napravili ste montažnu loptu tako da je možete koristiti kasnije.
  2. Desnim klikom na Hijerarhiju odaberite Stvori prazno. pojavit će se prazan objekt, preimenovati ga u respawn loptu i promijeniti njen položaj tako da bude isti kao položaj lopte.
  3. Desnim klikom na hijerarhiju odaberite UI >> Text. Uočite da tekst prati platno, položaj teksta u igri ovisi o položaju teksta na platnu, a ne u granicama naše igre. (Pogledajte sliku 1).
  4. Promijenite položaj teksta gdje god želite.
  5. Ponovite korake 3 i 4 za rezultat drugog igrača.
  6. Unesite prvi tekst "Rezultat igrača 1: 0", a drugi tekst "Rezultat igrača 2: 0". (Pogledajte sliku 2).
  7. Napravite skriptu na gornjoj granici koja se zove p1wins i kopirajte sljedeći kod.

Šifra:

pomoću System. Collections;

pomoću System. Collections. Generic; koristeći UnityEngine; koristeći UnityEngine. SceneManagement; koristeći UnityEngine. UI; javna klasa p1wins: MonoBehaviour {public Text score; javni Transform ball_respawn; javna lopta GameObject; privatni int p1 = 0; // Start se poziva prije prvog ažuriranja okvira void Start () {} // Ažuriranje se poziva jednom po okviru void Update () {score.text = "Rezultat igrača 1:" + p1; } void OnCollisionEnter2D (Collision2D other) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p1 ++; Instantiate (ball, ball_respawn.position, ball_respawn.rotation); }}}

8. Povucite i ispustite montažni okvir lopte iz projekta u koraku 1 u parametar Ball. (Pogledajte sliku 3)

9. Povucite i ispustite loptu koja se ponovo pojavljuje iz hijerarhije na parametar Ball-rerspawn. (Pogledajte sliku 3)

10. povucite i ispustite igrača 1 rezultat iz hijerarhije u parametar Score. (Pogledajte sliku 3)

Objašnjenje koda:

Kad se lopta sudari s gornjom granicom, ona se uništava i ponovno se pojavljuje na poziciji ball_respawn koju smo dodijelili u koraku 2. cilj da lopta postane montažna je da je možemo ponovo prikazati sa svim njenim karakteristikama, u protivnom, ako smo je koristili iz hijerarhije će se ponovno pojaviti, ali se neće pomaknuti. Također, kada se lopta sudari s gornjom granicom, vrijednost koja je izvorno jednaka 0 naziva se p1 povećava za 1. ova vrijednost se prikazuje kao tekst, pa kada se lopta sudari s gornjom granicom, rezultat za igrača 1 se povećava za 1.

Sada učinite korake 7, 8, 9 i 10 za donju granicu

za korak 7, kreirajte skriptu zvanu p2wins i umjesto toga kopirajte sljedeći kod.

za korak 10, povucite i ispustite igrač 2 rezultat iz hijerarhije na parametar Score.

Šifra:

pomoću System. Collections;

pomoću System. Collections. Generic; koristeći UnityEngine; koristeći UnityEngine. SceneManagement; koristeći UnityEngine. UI; p2wins javne klase: MonoBehaviour {public Text score; javni Transform ball_respawn; javna lopta GameObject; privatni int p2 = 0; // Start se poziva prije prvog ažuriranja okvira void Start () {} // Ažuriranje se poziva jednom po kadru void Update () {score.text = "Rezultat igrača 2:" + p2; } void OnCollisionEnter2D (Collision2D other) {if (other.gameObject.tag == "Ball") {Uništi (other.gameObject); p2 ++; Instantiate (ball, ball_respawn.position, ball_respawn.rotation); }}}

Preporučuje se: