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, Studeni
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 izradom male igre za više igrača kojom će upravljati Arduino kontroler koji ćete i sami napraviti. Dakle, krenimo.

Pribor

Trebat će vam:

  • Prijenosno računalo
  • Unity Engine
  • C# IDE koji radi s Unityjem, poput vizualnog studija ili Atoma. (Koristit ću Visual Studio Code)
  • 2X Arduino Nano
  • 2X Velika ploča za kruh
  • 2X Mala ploča za kruh
  • 4X Tack prekidač (gumb)
  • 4X 200Ω otpornik
  • 12X spojne žice muški na muški
  • Arduino IDE

Bit će vam od pomoći ako imate osnovno razumijevanje korištenja Unityja, no 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

Veza za preuzimanje IDE -a koda Visual Studio:

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 jedinstvo

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

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

Kad se projekt otvori, imajte na umu da postoje 3 glavna odjeljka

  • Hijerarhija (tu ć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 što se nalazi unutar granica ove kamere prikazat će se u stvarnoj igri).

Pogledajte sliku 1

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

Počnimo stvaranjem granica.

  1. Da biste izradili novi objekt igre, odaberite Snimci> Kreiraj> Duhovi> kvadrat (nazovite ga "desna i lijeva granica") Pogledajte sliku 2
  2. Povucite i ispustite desnu i lijevu granicu do hijerarhije i u sceni će se pojaviti kvadrat.
  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 fotoaparata (povucite gornju i donju stranu kvadrata da biste je rastegnuli).
  5. Prilagodite njegovu boju "s desne i lijeve granice"> inspektor> iscrtavanje spriteja> 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 otkrivanje sudara. Međutim, u našoj igri ne trebamo gravitaciju pa neka gravitacija bude 0 umjesto 1. Također ćete morati zamrznuti položaj i rotaciju kako se granica ne bi pomaknula 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 njezin položaj osi x 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 trebao bi 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.

Prilagodite:

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

Duplirajte (ctrl+d) i preimenujte player za kopiranje 2.

Prilagodite:

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

Pogledajte sliku 1

Izrada kontrolera

Trebat će vam:

  • 2X Arduino Nano
  • 2X Velika ploča za kruh
  • 2X Mala ploča za kruh
  • 4X Tack prekidač (gumb)
  • 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 držati desnu stranu ploče za kruh simetričnu s lijevom jer će time upravljačka palica izgledati bolje (30. stupac možete koristiti kao simetriju crta)
  3. Spojite gornji lijevi pin lijevog gumba s 5V iglom u Arduinu na maloj ploči za kruh (stvari koje su povezane s istim stupcem na ploči međusobno su povezane).
  4. Spojite gornji desni pin desne tipke s 5V iglom u Arduinu.
  5. Spojite donji desni zatik lijevog gumba s točkom u 31. stupcu pomoću otpornika.
  6. Spojite donji lijevi pin desne tipke s točkom na 29. stupcu 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 desne tipke s iglom D9 u Arduinu.
  10. Sada ponovite ove korake i napravite drugi regulator.

Korak 3: Povezivanje Arduina sa serijskim portom

Spajanje Arduina na serijski port
Spajanje Arduina na serijski port
Spajanje Arduina na serijski port
Spajanje Arduina na serijski port
Spajanje Arduina na serijski port
Spajanje Arduina na serijski port
Spajanje Arduina na serijski port
Spajanje Arduina na serijski port

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). Kad je Arduino ploča spojena na prijenosno računalo, operacijski sustav 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.

Pogledaj slike

  1. Povežite Arduino sa svojim prijenosnim računalom
  2. Alati> Ploča> 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 se pohraniti vrijednosti.
  6. Kopirajte kôd i zalijepite ga u Arduino IDE i pritisnite ctrl+u za učitavanje programa.
  7. Ponovite s drugim Arduinom. (kada radite korak 5, obavezno odaberite drugi COM port kako oba kontrolera ne bi bila spojena na isti serijski port).

Kodirati:

void setup () {

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

Objašnjenje programa:

Ovaj kôd jednostavno uzima ulaz s D3 pina i D9 pina u Arduinu, koji su spojeni na gumbe. Gumbi su ili pritisnuti ili pritisnuti, što znači da su očitavanja koja su uzeta s njih 1 ili 1 (pritisnuta) 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 (s D3) 1 (pritisnut), pohranite vrijednost 2 u serijski port.

Korak 4: Povezivanje jedinice s serijskim portom

Povezivanje jedinice s serijskim portom
Povezivanje jedinice s serijskim portom
Povezivanje jedinice s serijskim portom
Povezivanje jedinice s serijskim portom

Za ovaj korak identificirat ćemo serijski port u Unityju kako bi mogao primati ulaze iz Arduina kada se pritisnu gumbi. 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 pa pritisnite enter. Pogledajte sliku 1

U inspektoru će se stvoriti C# skripta, desnom tipkom miša kliknite na nju i odaberite uredi skriptu, 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).

Kodirati:

pomoću System. Collections;

pomoću System. Collections. Generic; pomoću UnityEngine; pomoću System. IO. Ports; player 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) {pokušajte {moveObject (sp. ReadByte ()); ispis (sp. ReadByte ()); } catch (System. Exception) {}}} void moveObject (int Direction) {if (Direction == 1) {transform. Translate (Vector3.left*amounttomove, Space. World); } if (Smjer == 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 lijeva tipka, Arduino šalje vrijednost 1 u serijski port, ako jedinica primi 1 iz serijskog porta, objektu igre "igrač 1" dodaje se brzina u lijevom smjeru. Kada se pritisne desna tipka, Arduino šalje vrijednost 2 u serijski port, ako jedinica primi 2 iz serijskog porta, objektu za igru "player 1" dodaje se brzina u pravom smjeru. ako serijski port ne primi vrijednost iz serijskog porta, brzina se ne dodaje ni u jednom smjeru, stoga ploča ostaje nepomična.

Nakon što kopirate kôd, pritisnite F5 za izradu i pokretanje koda. Vratite se jedinstvu i pritisnite gumb za reprodukciju, igrač 1 trebao bi se pomaknuti udesno kada pritisnete desno i lijevo kada pritisnete lijevo.

Sada učinite iste korake još jednom, ali s playerom 2 i obavezno upišite u "Dodaj komponentu" 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 ljestvicu (X: 0,2 - Y: 0,2 - Z: 0,2).
  5. Dodajte 2D kruto 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> Stvori> Fizički materijal 2D Pogledajte sliku 1
  10. promijenite ime u "bounce"
  11. Promijenite trenje na nulu od inspektora
  12. Promijenite bounciness u 1 od inspektora
  13. Povucite i ispustite "odskočiti" u Rigidbody 2D> Materijal Pogledajte sliku 2
  14. Ponovno odaberite "loptu" iz hijerarhije i idite na dodavanje komponente i upišite Ball_movement pa pritisnite enter.
  15. Desnom tipkom miša kliknite skriptu i odaberite uredi skriptu.
  16. Kopirajte donji kôd i pritisnite F5 da biste ga izgradili i pokrenuli.

Kodirati:

pomoću System. Collections;

pomoću System. Collections. Generic; pomoću 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*sila); }}

Objašnjenje koda

Ovaj kôd 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 8. koraku smo dodali fizički materijal lopti i promijenili njezinu poskočnost, čime se održava kretanje lopte kroz igru.

Korak 6: Dovršavanje igre

Dovršavanje igre
Dovršavanje igre
Dovršavanje igre
Dovršavanje igre
Dovršavanje igre
Dovršavanje igre
Dovršavanje igre
Dovrš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 s granicama gore ili dolje i poništiti položaj lopte.

  1. Povucite i ispustite loptu iz Hijerarhije u Project. Napravili ste montažnu loptu tako da je kasnije možete koristiti.
  2. Desnom tipkom miša kliknite Hijerarhiju i 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. Desnom tipkom miša kliknite hijerarhiju i 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. Upišite prvi tekst "Igrač 1 rezultat: 0", a drugi tekst "Igrač 2 bod: 0". (Pogledajte sliku 2).
  7. Napravite skriptu na gornjoj granici pod nazivom p1wins i kopirajte sljedeći kod.

Kodirati:

pomoću System. Collections;

pomoću System. Collections. Generic; pomoću UnityEngine; pomoću UnityEngine. SceneManagement; pomoću UnityEngine. UI; p1wins javne klase: 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 ponovno 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 koja nam je dodijeljena u koraku 2. cilj da lopta postane montažna je da je možemo ponovno prikazati sa svim njezinim značajkama, 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 se za 1. ta se vrijednost prikazuje kao tekst, pa se kada se lopta sudari s gornjom granicom rezultat za igrača 1 povećava za 1.

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

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

za korak 10, povucite i ispustite player 2 rezultat iz hijerarhije u parametar Score.

Kodirati:

pomoću System. Collections;

pomoću System. Collections. Generic; pomoću UnityEngine; pomoću UnityEngine. SceneManagement; pomoću 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 okviru void Update () {score.text = "Rezultat igrača 2:" + p2; } void OnCollisionEnter2D (Collision2D other) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p2 ++; Instantiate (ball, ball_respawn.position, ball_respawn.rotation); }}}

Preporučeni: