Kazalo:

Kako narediti igro za več igralcev s krmilniki Arduino: 6 korakov
Kako narediti igro za več igralcev s krmilniki Arduino: 6 korakov

Video: Kako narediti igro za več igralcev s krmilniki Arduino: 6 korakov

Video: Kako narediti igro za več igralcev s krmilniki Arduino: 6 korakov
Video: Leap Motion SDK 2024, November
Anonim
Kako narediti igro za več igralcev s krmilniki Arduino
Kako narediti igro za več igralcev s krmilniki Arduino

Ste se kdaj vprašali, kako razvijalci iger ustvarjajo neverjetne igre, ki jih ljudje po vsem svetu uživajo? No, danes vam bom o tem dal le majhen namig, tako da naredim majhno igro za več igralcev, ki jo bo nadziral bodisi Arduino krmilnik, ki ga boste tudi sami naredili. Torej, začnimo.

Zaloge

Boste potrebovali:

  • Prenosnik
  • Unity Engine
  • IDE C#, ki deluje z Unity, kot sta vizualni studio ali Atom. (Uporabil bom kodo Visual Studio)
  • 2X Arduino Nano
  • 2X velika plošča za kruh
  • 2X majhna plošča za kruh
  • 4X Tack stikalo (potisni gumb)
  • 4X 200Ω upor
  • 12X moških žic za moške
  • Arduino IDE

V pomoč vam bo, če imate osnovno razumevanje uporabe Unityja, vendar to ne bo vplivalo na vaš napredek, saj se boste z njim seznanili med ustvarjanjem igre.

Povezava za prenos Unity Engine:

store.unity.com/download-nuo

Povezava za prenos IDE kode Visual Studio:

code.visualstudio.com/download

Povezava za prenos Arduino IDE:

www.arduino.cc/en/Main/Software

1. korak: Nastavite meje igre

Nastavite meje igre
Nastavite meje igre
Nastavite meje igre
Nastavite meje igre
Nastavite meje igre
Nastavite meje igre

Najprej morate prenesti enoto

Ko to storite, lahko začnete nastavljati pogled svoje igre.

Odprite nov projekt Unity, ga poimenujte in izberite 2D igra.

Ko se projekt odpre, upoštevajte, da se imenujejo 3 glavni odseki

  • Hierarhija (tukaj bodo dodani vsi vaši predmeti igre in podrobnosti).
  • Scena (kjer nastavite pogled igre).
  • Igra (kjer lahko preizkusite, kako bo videti prava igra).

Upoštevajte, da je pod hierarhijo vaš prizor, pod prizorom pa "glavna kamera". Ko iz hierarhije izberete kamero, bo izbrana v prizoru

(Vse v mejah te kamere bo prikazano v resnični igri).

Poglejte sliko 1

Naša igra je sestavljena iz dveh desk, žoge, ki se premika, in obrob, ki omejujejo gibanje desk in žoge.

Začnimo z ustvarjanjem meja.

  1. Če želite ustvariti nov predmet igre, izberite Sredstva> Ustvari> Sprites> kvadrat (poimenujte ga »desna in leva obroba«) Poglejte sliko 2
  2. Povlecite in spustite desne in leve meje do hierarhije in v prizoru se bo pojavil kvadrat.
  3. Položaj osi x nastavite na (5) »desna in leva obroba«> inšpektor> preoblikuj> položaj> X. Poglej sliko 3
  4. Nato prilagodite njeno lestvico, da bo dovolj velika, da pokrije meje kamere (povlecite zgornjo in spodnjo stran kvadrata, da jo raztegnete).
  5. Prilagodite njegovo barvo »od desne in leve meje«> inšpektor> uprite upodabljanje> barva. Poglej sliko 3
  6. Pomaknite se navzdol v inšpektorju in izberite dodajanje komponente, nato vnesite Rigidbody2D in pritisnite enter, to bo v bistvu dodalo fiziko vašemu objektu igre, saj mu daje maso, težo in zaznavanje trkov. Vendar v naši igri ne potrebujemo gravitacije, zato naj bo gravitacija 0 namesto 1. Prav tako boste morali zamrzniti položaj in rotacijo, da se ob trku meja ne premakne. Poglejte sliko 4
  7. izberite dodajanje komponente, nato vnesite Box Collider 2D in pritisnite enter. To bo dodalo območje okoli predmeta igre, kjer je mogoče zaznati trke. Poglejte sliko 4
  8. Zdaj izberite desno in levo obrobo in pritisnite (ctrl+d), da jo podvojite.
  9. Preimenujte ga v levo obrobo in preimenujte prvo (desno obrobo).
  10. Izberite levo obrobo in nastavite njen položaj osi x na (-5) na enak način v koraku 3. Zdaj imate desno in levo obrobo.

Ponovite prejšnjih 10 korakov z mejami navzgor in navzdol in spremenite položaj y kvadrata namesto položaja x. Končni predogled bi moral biti nekaj podobnega tistemu na sliki.

Poglejte sliko 5

2. korak: Dodajanje plošč in izdelava krmilnikov

Dodajanje plošč in izdelava krmilnikov
Dodajanje plošč in izdelava krmilnikov
Dodajanje plošč in izdelava krmilnikov
Dodajanje plošč in izdelava krmilnikov
Dodajanje plošč in izdelava krmilnikov
Dodajanje plošč in izdelava krmilnikov

Dodajanje plošč

Naredite nov predmet igre in ga poimenujte igralec 1.

Prilagodi:

  • Lestvica: X (1.2), Y (0.15), Z (1)
  • Položaj: X (0), Y (-3,6), z (0)
  • Dodajte BoxCollider2D
  • Dodajte Rigidbody 2D in zamrznite osi y in z.

Podvojite (ctrl+d) in preimenujte predvajalnik kopiranja 2.

Prilagodi:

  • Lestvica: X (1.2), Y (0.15), Z (1)
  • Položaj: X (0), Y (3.6), z (0)
  • BoxCollider bo že tam.
  • Rigidbody 2D bo že tam, osi y in z pa bosta že zamrznjeni.

Poglejte sliko 1

Izdelava krmilnikov

Boste potrebovali:

  • 2X Arduino Nano
  • 2X velika plošča za kruh
  • 2X majhna plošča za kruh
  • 4X Tack stikalo (potisni gumb)
  • 4X upor
  • 12X moških žic za moške

Zdaj si oglejte fotografije in zemljevid krušne plošče, da sestavite igralne palice.

  1. Pritrdite en čip Arduino Nano z majhno ploščo za kruh.
  2. na veliko ploščo za kruh pritrdite 2 stikala Tack, kot je prikazano na sliki. Poskusite, da bo desna stran krušne deske simetrična levi, saj bo tako krmilna palica videti bolje (30. stolpec lahko uporabite kot simetrijo vrstica)
  3. Zgornji levi zatič leve tipke povežite s 5V zatičem v Arduinu na majhni plošči za kruh (stvari, ki so povezane z istim stolpcem na plošči, so med seboj povezane).
  4. Zgornji desni zatič desnega gumba povežite s 5V zatičem v Arduinu.
  5. Z uporom povežite spodnji desni zatič leve tipke s točko v 31. stolpcu.
  6. Spodnji levi zatič desnega gumba povežite s točko na 29. stolpcu z uporom.
  7. Upor priključite z zatičem GND v Arduinu.
  8. Zgornji desni zatič leve tipke povežite z zatičem D3 v Arduinu.
  9. Zgornji levi zatič desnega gumba povežite z zatičem D9 v Arduinu.
  10. Zdaj ponovite te korake in naredite drugi krmilnik.

Korak 3: Priključitev Arduina na serijska vrata

Priključitev Arduina na serijska vrata
Priključitev Arduina na serijska vrata
Priključitev Arduina na serijska vrata
Priključitev Arduina na serijska vrata
Priključitev Arduina na serijska vrata
Priključitev Arduina na serijska vrata
Priključitev Arduina na serijska vrata
Priključitev Arduina na serijska vrata

Najprej boste morali namestiti Arduino IDE.

Ko so nameščeni, lahko začnete z izdelavo programa Arduino, ki sprejema vnose iz gumbov in jih shrani v serijska vrata (vrata COM). Ko je plošča Arduino povezana z vašim prenosnikom, operacijski sistem samodejno prepozna ploščo kot serijska vrata, na katera je mogoče naložiti programe. Vrednosti, shranjene v serijskih vratih, lahko uporabite v naslednjem koraku, ko povežemo Unity Engine s serijskimi vrati.

Zdaj povežimo Arduino s serijskimi vrati.

Poglej slike

  1. Arduino povežite s prenosnikom
  2. Orodja> Plošča> Arduino Nano
  3. Če je vaš čip Arduino nedaven (2018-2020) Orodja> Procesor> ATmega328P (stari zagonski nalagalnik).
  4. Če vaš čip Arduino ni nov (pred letom 2018) Orodja> Procesor> ATmega328P
  5. Orodja> Vrata> COM (katera koli številka se prikaže, v mojem primeru je to 10). * To so serijska vrata, kamor bodo shranjene vrednosti.
  6. Kopirajte kodo in jo prilepite v Arduino IDE in pritisnite ctrl+u, da naložite program.
  7. Ponovite z drugim Arduinom. (pri izvajanju 5. koraka izberite druga vrata COM, da oba krmilnika ne bosta povezana z istimi serijskimi vrati).

Koda:

void setup () {

Serial.begin (9600); pinMode (3, INPUT); // Povemo Arduinu, da sprejme vhod iz zatiča D3 pinMode (9, INPUT); // Povemo Arduinu, da sprejme vhod iz zatiča D9} void loop () {if (digitalRead (3) == 1) { /* Če Arduino prejme vnos 1 Serial.write (1); s pina 3 Iznesite vrednost 1 v serijska vrata Serial.flush (); */ zamuda (2); } if (digitalRead (9) == 1) { /* Če Arduino prejme vnos 1 Serial.write (2); iz zatiča 9 Iznesite vrednost 2 na serijska vrata Serial.flush (); */ zamuda (2); }}

Razlaga programa:

Ta koda preprosto vnese vhod iz zatiča D3 in zatiča D9 v Arduinu, ki sta povezana z gumbi. Gumbi so pritisnjeni ali stisnjeni, kar pomeni, da so odčitki, ki jih vzamemo, bodisi 1 (pritisnjeno) ali 0 (ne stisnjeno). Če je vnos z desnega gumba (iz D9) 1 (pritisnjen), shranite vrednost 1 v zaporedna vrata. Če je vnos z leve tipke (iz D3) 1 (pritisnjen), shranite vrednost 2 v zaporedna vrata.

4. korak: Povežite Unity s serijskimi vrati

Povezovanje Unity s serijskimi vrati
Povezovanje Unity s serijskimi vrati
Povezovanje Unity s serijskimi vrati
Povezovanje Unity s serijskimi vrati

Za ta korak bomo identificirali serijska vrata v Unityju, da bo lahko sprejela vnose iz Arduina, ko pritisnete gumbe. Namestite Visual Studio Code na prenosni računalnik. Nato pojdite na Unity, izberite igralca 1 iz hierarhije, se pomaknite navzdol in izberite dodajanje komponente ter vnesite player1_motion in pritisnite enter. Poglejte sliko 1

V inšpektorju bo ustvarjen skript C#, z desno miškino tipko kliknite nanj in izberite uredi skript, odprla se bo koda vizualnega studia in prikazala bo privzeto kodo, ki izgleda kot slika 2.

Kopirajte naslednjo kodo in spremenite "SerialPort sp = new SerialPort (" COM10 ", 9600);" s SerialPort sp = nov SerialPort ("COM vrata, na katera je povezan vaš Arduino", 9600); lahko ga najdete tako, da se vrnete na kodo Arduino in izberete Orodja> Vrata> COM (katera koli številka se prikaže).

Koda:

z uporabo System. Collections;

z uporabo System. Collections. Generic; z uporabo UnityEngine; z uporabo System. IO. Ports; igralec javnega razreda1_motion: MonoBehaviour {float speed = 8; zasebni plavajoči znesek za premikanje; SerialPort sp = nov SerialPort ("COM10", 9600); // Start se pokliče pred prvo posodobitvijo okvirja void Start () {sp. Open (); sp. ReadTimeout = 1; } // Posodobitev se kliče enkrat na okvir void Update () {amounttomove = speed*0.01f; if (sp. IsOpen) {poskusi {moveObject (sp. ReadByte ()); print (sp. ReadByte ()); } catch (System. Exception) {}}} void moveObject (int Direction) {if (Direction == 1) {transform. Translate (Vector3.left*amounttomove, Space. World); } if (Smer == 2) {transform. Translate (Vector3.right*amounttomove, Space. World); }}}

Pojasnilo kode:

Ta koda pove enoti, da sprejema vhode iz zaporednih vrat (COM 10). Ko pritisnete levi gumb, Arduino pošlje vrednost 1 v serijska vrata, če enota prejme 1 iz serijskih vrat, se igralnemu predmetu "igralec 1" v levi smeri doda hitrost. Ko pritisnete desni gumb, Arduino pošlje vrednost 2 v serijska vrata, če enota prejme 2 iz serijskih vrat, se predmetu igre "igralec 1" doda hitrost v pravo smer. če serijska vrata ne prejmejo vrednosti iz serijskih vrat, se hitrost ne doda v nobeno smer, zato plošča ostane pri miru.

Ko kopirate kodo, pritisnite F5, da jo sestavite in zaženete. Vrnite se k enotnosti in pritisnite gumb za predvajanje, igralec 1 bi se moral pritisniti desno, ko pritisnete desno in levo, ko pritisnete levo.

Zdaj ponovite iste korake, vendar s predvajalnikom 2, in namesto player1_motion vnesite "Dodaj komponento" player2_motion in identificirajte druga vrata COM, na katera je priključen drugi krmilnik, ne pa enaka serijska vrata.

Prav tako boste morali spremeniti "javni razred player1_motion: MonoBehaviour" v "javni razred player2_motion: MonoBehaviour" v sami kodi.

5. korak: Dodajanje žoge

Dodajanje žoge
Dodajanje žoge
Dodajanje žoge
Dodajanje žoge
Dodajanje žoge
Dodajanje žoge
  1. Dodajte nov predmet igre, vendar tokrat izberite krog namesto kvadrata.
  2. Preimenujte ga v "žogo".
  3. Povlecite in spustite hierarhijo.
  4. Prilagodite lestvico (X: 0,2 - Y: 0,2 - Z: 0,2).
  5. Dodajte 2D Rigidbody in zamrznite samo os Z.
  6. Maso spremenite na 0,0001
  7. Lestvico gravitacije spremenite na 0.
  8. Dodajte Box Collider 2D.
  9. Pojdite na Sredstva> Ustvari> Fizično gradivo 2D Poglejte sliko 1
  10. spremenite ime v "bounce"
  11. Trenje inšpektorja spremenite na nič
  12. Od inšpektorja spremenite bounciness na 1
  13. Povlecite in spustite "bounce" v Rigidbody 2D> Material Poglejte sliko 2
  14. V hierarhiji znova izberite "žogica" in pojdite na dodajanje komponente ter vnesite Ball_movement in pritisnite enter.
  15. Z desno miškino tipko kliknite skript in izberite uredi skript.
  16. Kopirajte spodnjo kodo in pritisnite F5, da jo sestavite in zaženete.

Koda:

z uporabo System. Collections;

z uporabo System. Collections. Generic; z uporabo UnityEngine; javni razred Ball_movement: MonoBehaviour {// Start se pokliče pred prvo posodobitvijo okvirja private float force = 2; void Start () {StartCoroutine (move ()); } IEnumerator move () {yield return new WaitForSeconds (2); GetComponent (). AddForce (nov Vector2 (1f, 0.5f)*0,02f*sila); }}

Razlaga kode

Ta koda daje žogi hitrost v obeh smereh v smeri X in Y v enaki velikosti, zaradi česar se žoga premakne pod kotom 45 °. V 8. koraku smo žogi dodali fizikalni material in spremenili njeno odbojnost, kar ohranja gibanje žoge skozi igro.

Korak 6: Dokončanje igre

Dokončanje igre
Dokončanje igre
Dokončanje igre
Dokončanje igre
Dokončanje igre
Dokončanje igre
Dokončanje igre
Dokončanje igre

Zdaj moramo omogočiti izgubo. Če zaženete igro, boste opazili, da žoga, ko gre mimo igralca 1 ali igralca 2, le odskoči od meje in to v naši igri ni ravno tisto, kar potrebujemo. Namesto tega želimo narediti števec rezultatov, ki šteje rezultat vsakič, ko žogica trči navzgor ali navzdol, in ponastaviti položaj žoge.

  1. Povlecite in spustite žogo iz hierarhije v Project, žogico ste naredili montažno, da jo lahko uporabite pozneje.
  2. Z desno miškino tipko kliknite Hierarchy in izberite Create Empty. prikazal se bo prazen predmet, ga preimenoval v respawn žogico in spremenil svoj položaj na enak kot položaj žoge.
  3. Z desno miškino tipko kliknite hierarhijo in izberite UI >> Besedilo. Upoštevajte, da besedilo spremlja platno, položaj besedila v igri je odvisen od položaja besedila na platnu in ne v mejah naše igre. (Oglejte si sliko 1).
  4. Spremenite položaj besedila, kjer koli želite.
  5. Ponovite koraka 3 in 4 za rezultat drugega igralca.
  6. Vnesite prvo besedilo "Rezultat igralca 1: 0" in drugo besedilo "Rezultat igralca 2: 0". (Oglejte si sliko 2).
  7. Ustvarite skript na zgornji meji, imenovan p1wins, in kopirajte naslednjo kodo.

Koda:

z uporabo System. Collections;

z uporabo System. Collections. Generic; z uporabo UnityEngine; uporaba UnityEngine. SceneManagement; z uporabo UnityEngine. UI; javni razred p1wins: MonoBehaviour {public Text score; javna preobrazba ball_respawn; javna žoga GameObject; zasebni int p1 = 0; // Start se pokliče pred prvo posodobitvijo kadra void Start () {} // Posodobitev se kliče enkrat na okvir void Update () {score.text = "Rezultat igralca 1:" + p1; } void OnCollisionEnter2D (Collision2D other) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p1 ++; Instantiate (ball, ball_respawn.position, ball_respawn.rotation); }}}

8. V parametru Ball povlecite in spustite montažni okvir kroglice iz prvega koraka v koraku 1. (Oglejte si sliko 3)

9. Povlecite in spustite žogo, ki se ponovno pojavi iz hierarhije, do parametra Bars-rerspawn. (Oglejte si sliko 3)

10. povlecite in spustite igralca 1 rezultat iz hierarhije v parameter Score. (Oglejte si sliko 3)

Pojasnilo kode:

Ko žoga trči v zgornjo mejo, se uniči in ponovno vzpostavi na položaju ball_respawn, ki smo ga dodelili v 2. koraku. Cilj, da žoga postane montažna, je, da jo lahko ponovno prikažemo z vsemi lastnostmi, sicer, če smo jo uporabili iz hierarhije se bo znova pojavil, vendar se ne bo premaknil. Tudi ko žoga trči z zgornjo obrobo, se vrednost, ki je prvotno enaka 0, imenovana p1, poveča za 1. ta vrednost je prikazana kot besedilo, tako da se pri trku žoge z zgornjo mejo rezultat za igralca 1 poveča za 1.

Zdaj naredite korake 7, 8, 9 in 10 za spodnjo mejo

za korak 7 ustvarite skript z imenom p2wins in namesto tega kopirajte naslednjo kodo.

za korak 10 povlecite in spustite rezultat 2 igralca iz hierarhije v parameter Score.

Koda:

z uporabo System. Collections;

z uporabo System. Collections. Generic; z uporabo UnityEngine; uporaba UnityEngine. SceneManagement; z uporabo UnityEngine. UI; javni razred p2wins: MonoBehaviour {public Text score; javna preobrazba ball_respawn; javna žoga GameObject; zasebni int p2 = 0; // Start se pokliče pred prvo posodobitvijo kadra void Start () {} // Posodobitev se kliče enkrat na okvir void Update () {score.text = "Rezultat igralca 2:" + p2; } void OnCollisionEnter2D (Collision2D other) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p2 ++; Instantiate (ball, ball_respawn.position, ball_respawn.rotation); }}}

Priporočena: