Innehållsförteckning:

Hur man gör ett flerspelarspel med Arduino -kontroller: 6 steg
Hur man gör ett flerspelarspel med Arduino -kontroller: 6 steg

Video: Hur man gör ett flerspelarspel med Arduino -kontroller: 6 steg

Video: Hur man gör ett flerspelarspel med Arduino -kontroller: 6 steg
Video: Hacka dator gratis achievement 2stycken 2024, Juli
Anonim
Hur man gör ett flerspelarspel med Arduino -kontroller
Hur man gör ett flerspelarspel med Arduino -kontroller

Har du någonsin undrat hur spelutvecklare skapar fantastiska spel som människor världen över tycker om att spela? Tja, idag ska jag ge dig bara en liten ledtråd om det genom att göra ett litet flerspelarspel som kommer att styras av antingen en Arduino -controller som du också kommer att göra. Så, låt oss komma igång.

Tillbehör

Du kommer behöva:

  • En bärbar dator
  • Enhetsmotor
  • En C# IDE som fungerar med Unity som visuell studio eller Atom. (Jag kommer att använda Visual Studio Code)
  • 2X Arduino Nano
  • 2X Big Brödbräda
  • 2X Small Brödbräda
  • 4X tack -switch (tryckknapp)
  • 4X 200Ω motstånd
  • 12X manliga till manliga bygeltrådar
  • Arduino IDE

Det kommer att vara till hjälp om du har en grundläggande förståelse för att använda Unity, men det kommer inte att påverka dina framsteg eftersom du kommer att bli bekant med det medan du fortsätter med att göra spelet.

Länk för nedladdning av Unity Engine:

store.unity.com/download-nuo

Länk för nedladdning av Visual Studio Code IDE:

code.visualstudio.com/download

Länk för nedladdning av Arduino IDE:

www.arduino.cc/en/Main/Software

Steg 1: Konfigurera spelets gränser

Ställ in spelets gränser
Ställ in spelets gränser
Ställ in spelets gränser
Ställ in spelets gränser
Ställ in spelets gränser
Ställ in spelets gränser

Först och främst måste du ladda ner enhet

När det är klart kan du börja ställa in spelets vy.

Öppna ett nytt Unity -projekt, namnge det och välj 2D -spel.

När projektet öppnas, märka att det finns 3 huvudsektioner som kallas

  • Hierarki (här kommer alla dina spelobjekt och detaljer att läggas till).
  • Scen (där du ställer in spelets vy).
  • Spel (där du kan testa hur det riktiga spelet kommer att se ut).

Lägg märke till att under hierarkin finns din scen och under scenen finns "Huvudkameran". När du väljer kameran från hierarkin kommer den att väljas i scenen

(Allt inom den här kamerans gränser kommer att visas i det riktiga spelet).

Se bild 1

Vårt spel består av två brädor, en boll som rör sig runt och gränser som begränsar brädornas och bollens rörelse.

Låt oss börja med att skapa gränserna.

  1. För att skapa ett nytt spelobjekt, välj Tillgångar> Skapa> Sprites> kvadrat (namnge det "höger och vänster kant") Titta på bild 2
  2. Dra och släpp höger och vänster gränser till hierarkin och en ruta visas i scenen.
  3. Justera dess x -axelposition till (5) "höger och vänster kant"> inspektör> transform> position> X. Se bild 3
  4. Justera sedan dess skala så att den är tillräckligt stor för att täcka kamerans gränser (dra den övre och nedre sidan av torget för att sträcka ut den).
  5. Justera färgen "från höger och vänster kant"> inspektör> sprite render> färg. Se bild 3
  6. Rulla ner i inspektören och välj lägg till komponent, skriv sedan Rigidbody2D och tryck på enter, detta kommer i princip att lägga till fysik till ditt spelobjekt eftersom det ger det massa, gravitation och kollisionsdetektering. Men vi behöver inte tyngdkraften i vårt spel så gör gravitationen 0 istället 1. Du måste också frysa positionen och rotationen så att gränsen inte rör sig när den kolliderar. Se bild 4
  7. välj lägg till komponent och skriv sedan Box Collider 2D och tryck på enter så läggs till ett område runt spelobjektet där kollisioner kan detekteras. Se bild 4
  8. Välj nu höger och vänster kant och tryck på (ctrl+d) för att duplicera den.
  9. Byt namn på den "vänster kant" och byt namn på den första ("högra gränsen").
  10. Välj vänster kant och justera dess x-axelposition till (-5) med samma sätt i steg 3. Nu har du höger och vänster kant.

Upprepa de föregående 10 stegen med upp- och nedkanterna och ändra kvadratets y -position istället för x -positionen. Den sista förhandsvisningen ska vara något liknande den på bilden.

Se bild 5

Steg 2: Lägga till kort och göra kontroller

Lägga till kort och göra kontroller
Lägga till kort och göra kontroller
Lägga till kort och göra kontroller
Lägga till kort och göra kontroller
Lägga till kort och göra kontroller
Lägga till kort och göra kontroller

Lägga till styrelser

Gör ett nytt spelobjekt och namnge det spelare 1.

Justera:

  • Skala: X (1,2), Y (0,15), Z (1)
  • Position: X (0), Y (-3,6), z (0)
  • Lägg till BoxCollider2D
  • Lägg till Rigidbody 2D och frys y- och z -axlarna.

Kopiera (ctrl+d) och byt namn på kopieringsspelaren 2.

Justera:

  • Skala: X (1,2), Y (0,15), Z (1)
  • Position: X (0), Y (3.6), z (0)
  • En BoxCollider kommer att finnas där redan.
  • En Rigidbody 2D kommer redan att finnas där och y- och z -axlarna kommer redan att frysas.

Se bild 1

Att göra kontroller

Du kommer behöva:

  • 2X Arduino Nano
  • 2X Big Brödbräda
  • 2X Small Brödbräda
  • 4X tack -switch (tryckknapp)
  • 4X motstånd
  • 12X manliga till manliga bygeltrådar

Titta nu på brödbrädets foton och kartläggning för att montera styrspakarna.

  1. Fäst ett Arduino Nano -chip med ett litet brödbräda.
  2. fäst 2 Tack -omkopplare på det stora brödbrädet som visas på bilden. Försök att hålla brödbrädans högra sida symmetrisk mot den vänstra, eftersom detta kommer att få joysticken att se bättre ut (Du kan använda den 30: e kolumnen som en symmetri linje)
  3. Anslut den övre vänstra stiftet på den vänstra knappen med 5V-stiftet i Arduino på det lilla brödbrädet (saker som är anslutna med samma kolumn i brödbrädet är anslutna till varandra).
  4. Anslut den högra knappens övre högra knapp med 5V-stiftet i Arduino.
  5. Anslut den nedre högra stiftet på den vänstra knappen med en punkt på den 31: e kolumnen med ett motstånd.
  6. Anslut den nedre vänstra stiftet på den högra knappen med en punkt på den 29: e kolumnen med ett motstånd.
  7. Anslut motstånden med GND -stiftet i Arduino.
  8. Anslut den övre högra stiftet på den vänstra knappen med D3-stiftet i Arduino.
  9. Anslut den övre vänstra stiftet på den högra knappen med D9-stiftet i Arduino.
  10. Upprepa nu dessa steg och gör den andra styrenheten.

Steg 3: Anslut Arduino till serieporten

Ansluter Arduino till serieporten
Ansluter Arduino till serieporten
Ansluter Arduino till serieporten
Ansluter Arduino till serieporten
Ansluter Arduino till serieporten
Ansluter Arduino till serieporten
Ansluter Arduino till serieporten
Ansluter Arduino till serieporten

Först måste du installera Arduino IDE.

När de är installerade kan du börja med att skapa ett Arduino -program som tar emot ingångar från knapparna och lagra dem i en seriell port (COM -port). När ett Arduino -kort är anslutet till din bärbara dator, känner operativsystemet automatiskt igen kortet som en seriell port, som program kan laddas upp till. De värden som lagras i serieporten kan användas i nästa steg när vi ansluter Unity Engine till serieporten.

Låt oss nu ansluta Arduino till den seriella porten.

Kolla på bilderna

  1. Anslut en Arduino med din bärbara dator
  2. Verktyg> Bräda> Arduino Nano
  3. Om ditt Arduino-chip är nytt (2018-2020) Verktyg> Processor> ATmega328P (Old Bootloader).
  4. Om ditt Arduino -chip inte är nytt (före 2018) Verktyg> Processor> ATmega328P
  5. Verktyg> Port> COM (vilket nummer som helst visas, i mitt fall är det 10). * Detta är den seriella porten där värdena kommer att lagras.
  6. Kopiera koden och klistra in den i Arduino IDE och tryck på ctrl+u för att ladda upp programmet.
  7. Upprepa med den andra Arduino. (när du gör steg 5, se till att välja en annan COM -port så att båda kontrollerna inte är anslutna till samma seriella port).

Koda:

void setup () {

Serial.begin (9600); pinMode (3, INPUT); // Berätta för Arduino att ta emot en ingång från pin D3 pinMode (9, INPUT); // Berätta för Arduino att ta emot en ingång från pin D9} void loop () {if (digitalRead (3) == 1) { /* Om Arduino får en ingång på 1 Serial.write (1); från stift 3 Mata ut ett värde på 1 till serieporten Serial.flush (); */ fördröjning (2); } if (digitalRead (9) == 1) { /* Om Arduino tar emot en ingång på 1 Serial.write (2); från stift 9 Mata ut värdet 2 till serieporten Serial.flush (); */ fördröjning (2); }}

Förklaring av programmet:

Denna kod tar helt enkelt en ingång från D3 -stiftet och D9 -stiftet i Arduino, som är anslutna till knapparna. Knapparna är antingen nedtryckta eller ej tryckta vilket innebär att avläsningarna som tas från dem är antingen 1 (nedtryckta) eller 0 (ej tryckta). Om ingången från den högra knappen (från D9) är 1 (nedtryckt), lagra ett värde på 1 i serieporten. Om ingången från den vänstra knappen (från D3) är 1 (nedtryckt) lagrar du värdet 2 i serieporten.

Steg 4: Anslut enhet med serieporten

Ansluta enhet med serieporten
Ansluta enhet med serieporten
Ansluta enhet med serieporten
Ansluta enhet med serieporten

För detta steg kommer vi att identifiera den seriella porten i Unity så att den kan ta emot ingångarna från Arduino när knapparna trycks in. Installera Visual Studio Code på din bärbara dator. Gå sedan till Unity, välj spelare 1 från hierarkin, rulla ner och välj lägg till komponent och skriv player1_motion och tryck sedan på enter. Se bild 1

Ett C# -skript skapas i inspektören, högerklickar på det och väljer redigeringsskript, visuell studiokod ska öppnas och visar en standardkod som ser ut som bild 2.

Kopiera följande kod och ändra sedan "SerialPort sp = new SerialPort (" COM10 ", 9600);" med SerialPort sp = ny SerialPort ("COM -port som din Arduino är ansluten till", 9600); du kan hitta hans genom att gå tillbaka till din Arduino -kod och gå till Verktyg> Port> COM (vilket nummer som helst visas).

Koda:

använder System. Collections;

använder System. Collections. Generic; använder UnityEngine; använder System. IO. Ports; public class player1_motion: MonoBehaviour {float speed = 8; privat float amounttomove; SerialPort sp = ny SerialPort ("COM10", 9600); // Start anropas före den första bilduppdateringen void Start () {sp. Open (); sp. ReadTimeout = 1; } // Uppdatering anropas en gång per ram tomrum Uppdatering () {amounttomove = hastighet*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 (Riktning == 2) {transform. Translate (Vector3.right*amounttomove, Space. World); }}}

Kodens förklaring:

Denna kod anger enhet för att ta emot ingångar från serieporten (COM 10). När den vänstra knappen trycks in skickar Arduino ett värde av 1 till serieporten, om enhet får 1 från serieporten läggs en hastighet till spelobjektet "spelare 1" i vänster riktning. När den högra knappen trycks in skickar Arduino ett värde av 2 till serieporten, om enhet får 2 från serieporten läggs en hastighet till spelobjektet "spelare 1" i rätt riktning. om serieporten inte får ett värde från serieporten, läggs ingen hastighet till i båda riktningarna, därför förblir kortet stillastående.

När du har kopierat koden trycker du på F5 för att bygga och köra koden. Gå tillbaka till enhet och tryck på uppspelningsknappen, spelare 1 ska flytta höger när du trycker på höger och vänster när du trycker på vänster.

Gör nu samma steg igen men med spelare 2 och se till att du skriver i 'Lägg till komponent' player2_motion istället för player1_motion och identifierar den andra COM -porten som den andra styrenheten är ansluten till, inte samma serieport.

Du kommer också att behöva ändra "public class player1_motion: MonoBehaviour" till "public class player2_motion: MonoBehaviour" i själva koden.

Steg 5: Lägga till bollen

Lägga till bollen
Lägga till bollen
Lägga till bollen
Lägga till bollen
Lägga till bollen
Lägga till bollen
  1. Lägg till ett nytt spelobjekt, men välj den här gången en cirkel istället för en kvadrat.
  2. Byt namn på den till "boll".
  3. Dra och släpp i hierarkin.
  4. Justera skalan (X: 0,2 - Y: 0,2 - Z: 0,2).
  5. Lägg till en Rigidbody 2D och frys bara Z -axeln.
  6. Ändra massan till 0,0001
  7. Ändra Gravity Scale till 0.
  8. Lägg till en Box Collider 2D.
  9. Gå till Tillgångar> Skapa> Fysikmaterial 2D Titta på bild 1
  10. ändra namn till "studsa"
  11. Ändra friktionen till noll från inspektören
  12. Ändra bounciness till 1 från inspektören
  13. Dra och släpp "studsa" till Rigidbody 2D> Material Titta på bild 2
  14. Välj "boll" igen från hierarkin och gå till lägg till komponent och skriv Ball_movement och tryck sedan på enter.
  15. Högerklicka på skriptet och välj redigera skript.
  16. Kopiera koden nedan och tryck på F5 för att bygga och köra den.

Koda:

använder System. Collections;

använder System. Collections. Generic; använder UnityEngine; offentlig klass Ball_movement: MonoBehaviour {// Start anropas före den första bilduppdateringen privata float force = 2; void Start () {StartCoroutine (move ()); } IEnumerator move () {yield return new WaitForSeconds (2); GetComponent (). AddForce (ny Vector2 (1f, 0.5f)*0.02f*kraft); }}

Kodens förklaring

Denna kod ger bollen en hastighet i båda riktningarna X -riktningen och Y -riktningen med samma storlek, vilket får bollen att röra sig i en 45 ° vinkel. I steg 8 lade vi till ett fysikmaterial till bollen och ändrade dess studsa, detta bibehåller bollens rörelse genom hela spelet.

Steg 6: Avsluta spelet

Avsluta spelet
Avsluta spelet
Avsluta spelet
Avsluta spelet
Avsluta spelet
Avsluta spelet
Avsluta spelet
Avsluta spelet

Nu måste vi förlora, om du kör spelet kommer du att märka att när bollen passerar spelare 1 eller spelare 2 så studsar den bara utanför gränsen och det är inte precis vad vi behöver i vårt spel. Istället vill vi göra en poängräknare som räknar poängen varje gång bollen kolliderar med antingen upp- eller nedgränserna och för att återställa bollens position.

  1. Dra och släpp bollen från hierarkin till projektet. Du har gjort en prefab för bollen så att du kan använda den senare.
  2. Högerklicka på hierarkin och välj Skapa tomt. ett tomt objekt kommer att dyka upp, byta namn på det till bollen respawn och ändra dess position för att vara densamma som bollens position.
  3. Högerklicka på hierarkin och välj UI >> Text. Lägg märke till att texten åtföljer en duk. Textens placering i spelet beror på textens placering i duken, inte i gränserna för vårt spel. (Se bild 1).
  4. Ändra textens position till var du vill att den ska vara.
  5. Upprepa steg 3 och 4 igen för poängen för den andra spelaren.
  6. Skriv in den första texten "Player 1 Score: 0" och skriv in den andra texten "Player 2 Score: 0". (Se bild 2).
  7. Skapa ett skript i uppgränsen som kallas p1wins och kopiera följande kod.

Koda:

använder System. Collections;

använder System. Collections. Generic; använder UnityEngine; med UnityEngine. SceneManagement; med UnityEngine. UI; public class p1wins: MonoBehaviour {public Text score; offentlig Transform ball_respawn; offentlig GameObject -boll; privat int p1 = 0; // Start anropas innan den första bilduppdateringen void Start () {} // Uppdatering kallas en gång per ram void Update () {score.text = "Player 1 Score:" + p1; } ogiltig OnCollisionEnter2D (Collision2D annat) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p1 ++; Instantiate (boll, ball_respawn.position, ball_respawn.rotation); }}}

8. Dra och släpp bollen prefab från projektet i steg 1 till bollparametern. (Se bild 3)

9. Dra och släpp bollen respawn från hierarkin till parametern Ball-rerspawn. (Se bild 3)

10. dra och släpp spelare 1 poäng från hierarkin till poängparametern. (Se bild 3)

Kodens förklaring:

När bollen kolliderar med den övre gränsen förstörs den och återuppstår igen vid ball_respawn -positionen som vi tilldelade i steg 2. Målet med att göra bollen till en prefab är att kunna repa den med alla dess funktioner, annars om vi använde bollen från hierarkin kommer den att återuppstå men den kommer inte att röra sig. Även när bollen kolliderar med den övre gränsen ökar ett värde som ursprungligen är lika med 0 kallat p1 med 1. detta värde visas som text, så när bollen kolliderar med den övre gränsen ökar poängen för spelare 1 med 1.

Utför nu steg 7, 8, 9 och 10 för nedre gränsen

för steg 7, skapa ett skript som heter p2wins och kopiera följande kod istället.

för steg 10, dra och släpp spelare 2 -poäng från hierarkin till poängparametern.

Koda:

använder System. Collections;

använder System. Collections. Generic; använder UnityEngine; med UnityEngine. SceneManagement; med UnityEngine. UI; public class p2wins: MonoBehaviour {public Text score; offentlig Transform ball_respawn; offentlig GameObject -boll; privat int p2 = 0; // Start anropas före den första bilduppdateringen void Start () {} // Uppdatering kallas en gång per ram void Update () {score.text = "Player 2 Score:" + p2; } ogiltig OnCollisionEnter2D (Collision2D annat) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p2 ++; Instantiate (boll, ball_respawn.position, ball_respawn.rotation); }}}

Rekommenderad: