Taula de continguts:

Com fer un joc multijugador amb controladors Arduino: 6 passos
Com fer un joc multijugador amb controladors Arduino: 6 passos

Vídeo: Com fer un joc multijugador amb controladors Arduino: 6 passos

Vídeo: Com fer un joc multijugador amb controladors Arduino: 6 passos
Vídeo: Создание приложений для мобильных устройств, игр, Интернета вещей и многого другого с помощью AWS DynamoDB, Рик Хулихан 2024, Juliol
Anonim
Com fer un joc multijugador amb controladors Arduino
Com fer un joc multijugador amb controladors Arduino

Us heu preguntat mai com els desenvolupadors de jocs creen jocs increïbles als quals la gent de tot el món gaudeix jugant? Bé, avui us donaré un petit consell sobre això fent un petit joc multijugador que serà controlat per un controlador Arduino que també feu. Per tant, comencem.

Subministraments

Necessitarà:

  • Un portàtil
  • Unity Engine
  • Un ID C # que funciona amb Unity, com ara Visual Studio o Atom. (Utilitzaré Visual Studio Code)
  • 2X Arduino Nano
  • Tauler de pa gran 2X
  • Tauler de pa petit 2X
  • Interruptor 4X Tack (polsador)
  • Resistència 4X 200Ω
  • 12X cables de pont masculí a masculí
  • IDE Arduino

Serà útil si teniu una comprensió bàsica sobre l’ús d’Unity, però no afectarà el vostre progrés, ja que us en familiaritzareu mentre continueu fent el joc.

Enllaç per descarregar Unity Engine:

store.unity.com/download-nuo

Enllaç per descarregar Visual Studio Code IDE:

code.visualstudio.com/download

Enllaç per descarregar Arduino IDE:

www.arduino.cc/ca/Main/Software

Pas 1: configureu les fronteres del joc

Configureu les fronteres del joc
Configureu les fronteres del joc
Configureu les fronteres del joc
Configureu les fronteres del joc
Configureu les fronteres del joc
Configureu les fronteres del joc

Primer de tot, heu de descarregar unitat

Un cop fet això, podeu començar a configurar la visualització del joc.

Obriu un nou projecte Unity, nomeneu-lo i seleccioneu el joc 2D.

Quan s'obre el projecte, observeu que hi ha 3 seccions principals anomenades

  • Jerarquia (aquí s’afegiran tots els objectes i detalls del joc).
  • Escena (on configureu la visualització del joc).
  • Joc (on podeu provar com anirà el joc real).

Tingueu en compte que sota la jerarquia hi ha la vostra escena i a sota hi ha la "Càmera principal". Quan seleccioneu la càmera de la jerarquia, aquesta serà seleccionada a l'escena

(Tot el que estigui dins dels límits d'aquesta càmera es mostrarà al joc real).

Mireu la imatge 1

El nostre joc consisteix en dos taulers, una bola que es mou i unes sanefes que limiten el moviment de les taules i la bola.

Comencem creant les fronteres.

  1. Per crear un objecte de joc nou, seleccioneu Actius> Crea> Sprites> quadrat (anomeneu-lo "vores dreta i esquerra") Mireu la imatge 2
  2. Arrossegueu i deixeu anar els límits dret i esquerre cap a la jerarquia i apareixerà un quadrat a l’escena.
  3. Ajusteu la posició de l'eix x a (5) "vores dreta i esquerra"> inspector> transforma> posició> X. Mireu la imatge 3
  4. A continuació, ajusteu la seva escala de manera que sigui prou gran per cobrir les vores de la càmera (arrossegueu els costats superior i inferior del quadrat per estirar-la).
  5. Ajusteu el color "des de les vores dreta i esquerra"> inspector> renderització sprite> color. Mireu la imatge 3
  6. Desplaceu-vos cap avall a l'inspector i seleccioneu Afegeix component, després escriviu Rigidbody2D i premeu Retorn, bàsicament afegirà física al vostre objecte de joc ja que li proporciona detecció de massa, gravetat i col·lisió. Tanmateix, no necessitem gravetat al nostre joc, de manera que feu la gravetat 0 en lloc de 1. També haureu de congelar la posició i la rotació perquè la vora no es mogui quan es xoca. Mireu la imatge 4
  7. seleccioneu Afegeix component i escriviu Box Collider 2D i premeu Intro per afegir una àrea al voltant de l'objecte del joc on es poden detectar col·lisions. Mireu la imatge 4
  8. Ara seleccioneu les vores dreta i esquerra i premeu (ctrl + d) per duplicar-lo.
  9. Canvieu el nom de "vora esquerra" i canvieu el nom del primer ("vora dret").
  10. Seleccioneu el límit esquerre i ajusteu la posició de l'eix x a (-5) de la mateixa manera al pas 3. Ara teniu els límits dret i esquerre.

Repetiu els 10 passos anteriors amb les vores amunt i avall i canvieu la posició y del quadrat en lloc de la posició x. La previsualització final hauria de ser similar a la de la imatge.

Mireu la imatge 5

Pas 2: afegir taulers i fer controladors

Afegir taules i fer controladors
Afegir taules i fer controladors
Afegir taules i fer controladors
Afegir taules i fer controladors
Afegir taules i fer controladors
Afegir taules i fer controladors

Addició de taulers

Crea un nou objecte de joc i posa'l com a jugador 1.

Ajustar:

  • Escala: X (1,2), Y (0,15), Z (1)
  • Posició: X (0), Y (-3,6), z (0)
  • Afegiu BoxCollider2D
  • Afegiu Rigidbody 2D i congeleu els eixos y i z.

Dupliqueu (ctrl + d) i canvieu el nom del reproductor de còpia 2.

Ajustar:

  • Escala: X (1,2), Y (0,15), Z (1)
  • Posició: X (0), Y (3.6), z (0)
  • Hi haurà un BoxCollider.
  • Ja hi haurà un Rigidbody 2D i els eixos y i z ja estaran congelats.

Mireu la imatge 1

Fabricació de controladors

Necessitarà:

  • 2X Arduino Nano
  • Tauler de pa gran 2X
  • Tauler de pa petit 2X
  • Interruptor 4X Tack (polsador)
  • Resistència 4X
  • 12X cables de pont masculí a masculí

Ara mireu les fotos i mapes de les taules de pa per muntar els joysticks.

  1. Connecteu un xip Arduino Nano amb una petita placa de pa.
  2. col·loqueu 2 interruptors de tac a la taula de pa gran, tal com es mostra a la imatge. Proveu de mantenir la part dreta de la placa de pa simètrica a la de l’esquerra, ja que farà que el joystick tingui un millor aspecte (podeu utilitzar la 30a columna com a simetria línia)
  3. Connecteu el pin superior esquerre del botó esquerre amb el pin de 5 V a l'Arduino a la petita placa de pa (les coses que estan connectades amb la mateixa columna de la taula de connexions estan connectades entre si).
  4. Connecteu el pin superior dret del botó dret amb el pin de 5 V a l'Arduino.
  5. Connecteu el pin inferior dret del botó esquerre amb un punt a la columna 31 mitjançant una resistència.
  6. Connecteu el pin inferior esquerre del botó dret amb un punt de la columna 29 mitjançant una resistència.
  7. Connecteu les resistències amb el pin GND de l'Arduino.
  8. Connecteu el pin superior dret del botó esquerre amb el pin D3 a l'Arduino.
  9. Connecteu el pin superior esquerre del botó dret amb el pin D9 a l'Arduino.
  10. Ara repeteix aquests passos i fes el segon controlador.

Pas 3: Connexió d'Arduino al port sèrie

Connexió d'Arduino al port sèrie
Connexió d'Arduino al port sèrie
Connexió d'Arduino al port sèrie
Connexió d'Arduino al port sèrie
Connexió d'Arduino al port sèrie
Connexió d'Arduino al port sèrie
Connexió d'Arduino al port sèrie
Connexió d'Arduino al port sèrie

En primer lloc, haureu d'instal·lar l'IDE Arduino.

Un cop instal·lats, podeu començar creant un programa Arduino que rebi entrades dels botons i emmagatzemeu-los en un port sèrie (port COM). Quan una placa Arduino està connectada al vostre ordinador portàtil, el sistema operatiu reconeix automàticament la placa com a port sèrie, a quins programes es poden penjar. Els valors emmagatzemats al port sèrie es poden utilitzar al pas següent quan connectem Unity Engine amb el port sèrie.

Ara connectem l'Arduino amb el port sèrie.

Mira les fotos

  1. Connecteu un Arduino amb el vostre ordinador portàtil
  2. Eines> Tauler> Arduino Nano
  3. Si el vostre xip Arduino és recent (2018-2020) Eines> Processador> ATmega328P (Old Bootloader).
  4. Si el vostre xip Arduino no és recent (abans del 2018) Eines> Processador> ATmega328P
  5. Eines> Port> COM (qualsevol número aparegui, en el meu cas és 10). * Aquest és el port sèrie on s’emmagatzemaran els valors.
  6. Copieu el codi i enganxeu-lo a l'IDE Arduino i premeu ctrl + u per penjar el programa.
  7. Repetiu amb el segon Arduino. (en fer el pas 5, assegureu-vos de triar un altre port COM perquè els dos controladors no es connectin al mateix port sèrie).

Codi:

configuració nul·la () {

Serial.begin (9600); pinMode (3, INPUT); // Dir-li a Arduino que rebi una entrada del pin D3 pinMode (9, INPUT); // Dir-li a Arduino que rebi una entrada del pin D9} void loop () {if (digitalRead (3) == 1) {/ * Si l'Arduino rep una entrada d'1 Serial.write (1); des del pin 3 Sortiu un valor d'1 al port sèrie Serial.flush (); * / demora (2); } if (digitalRead (9) == 1) {/ * Si l'Arduino rep una entrada d'1 Serial.write (2); des del pin 9 Sortiu un valor de 2 al port sèrie Serial.flush (); * / demora (2); }}

Explicació del programa:

Aquest codi simplement pren una entrada del pin D3 i del pin D9 a l'Arduino, que estan connectats als botons. Els botons es premen o es premen, cosa que significa que les lectures que se'n prenen són 1 (premut) o 0 (sense premer). Si l'entrada del botó dret (des de D9) és 1 (premut) emmagatzemeu un valor d'1 al port sèrie. Si l'entrada del botó esquerre (de D3) és 1 (premut) emmagatzemeu un valor de 2 al port sèrie.

Pas 4: Connectar Unity amb el port sèrie

Connexió d'unitat amb el port sèrie
Connexió d'unitat amb el port sèrie
Connexió d'unitat amb el port sèrie
Connexió d'unitat amb el port sèrie

Per a aquest pas, identificarem el port sèrie a Unity perquè pugui rebre les entrades d'Arduino quan es premen els botons. Instal·leu Visual Studio Code al vostre ordinador portàtil. A continuació, aneu a Unity, seleccioneu el jugador 1 de la jerarquia, desplaceu-vos cap avall i seleccioneu Afegeix component i escriviu player1_motion i, a continuació, premeu Intro. Mireu la imatge 1

Es crearà un script C # a l’inspector, feu-hi clic amb el botó dret i seleccioneu edita l’escriptura, s’hauria d’obrir el codi visual d’estudi i mostrarà un codi per defecte que s’assembla a la imatge 2.

Copieu el codi següent i canvieu "SerialPort sp = new SerialPort (" COM10 ", 9600);" amb SerialPort sp = new SerialPort ("port COM al qual està connectat el vostre Arduino", 9600); podeu trobar-ne tornant al vostre codi Arduino i anant a Eines> Port> COM (aparegui el número que aparegui).

Codi:

utilitzant System. Collections;

utilitzant System. Collections. Generic; utilitzant UnityEngine; utilitzant System. IO. Ports; jugador de classe pública1_motion: MonoBehaviour {float speed = 8; quantitat de flotador privat; SerialPort sp = new SerialPort ("COM10", 9600); // Start es crida abans de la primera actualització del frame void Start () {sp. Open (); sp. ReadTimeout = 1; } // Actualització es diu una vegada per cada fotograma void Actualització () {amounttomove = velocitat * 0,01f; if (sp. IsOpen) {prova {moveObject (sp. ReadByte ()); print (sp. ReadByte ()); } catch (System. Exception) {}}} void moveObject (int Direction) {if (Direction == 1) {transform. Translate (Vector3.left * amounttomove, Space. World); } if (Direcció == 2) {transform. Translate (Vector3.right * amounttomove, Space. World); }}}

Explicació del codi:

Aquest codi indica a la unitat que rebi entrades des del port sèrie (COM 10). Quan es prem el botó esquerre, l'Arduino envia un valor d'1 al port sèrie, si la unitat rep 1 des del port sèrie, s'afegeix una velocitat a l'objecte de joc "jugador 1" en la direcció esquerra. Quan es prem el botó dret, l'Arduino envia un valor de 2 al port sèrie, si la unitat rep 2 del port sèrie, s'afegeix una velocitat a l'objecte de joc "jugador 1" en la direcció correcta. si el port sèrie no rep cap valor del port sèrie, no s’afegeix cap velocitat en cap de les dues direccions, per tant, la placa es manté estacionària.

Després de copiar el codi, premeu F5 per crear i executar el codi. Torneu a la unitat i premeu el botó de reproducció; el jugador 1 s'ha de moure cap a la dreta quan premeu cap a la dreta i cap a l'esquerra quan premeu cap a l'esquerra.

Ara, feu els mateixos passos una vegada més, però amb el reproductor 2 i assegureu-vos d'escriure al reproductor "Add component" player2_motion en lloc de player1_motion i identificar el segon port COM al qual està connectat el segon controlador, no el mateix port sèrie.

També haureu de canviar "public class player1_motion: MonoBehaviour" a "public class player2_motion: MonoBehaviour" al propi codi.

Pas 5: Afegir la pilota

Afegir la pilota
Afegir la pilota
Afegir la pilota
Afegir la pilota
Afegir la pilota
Afegir la pilota
  1. Afegiu un objecte de joc nou, però aquesta vegada trieu un cercle en lloc de quadrat.
  2. Canvieu el nom de "pilota".
  3. Arrossegueu i deixeu anar a la jerarquia.
  4. Ajusteu l’escala (X: 0,2 - Y: 0,2 - Z: 0,2).
  5. Afegiu un Rigidbody 2D i congeleu només l’eix Z.
  6. Canvieu la massa a 0,0001
  7. Canvieu l’escala de gravetat a 0.
  8. Afegiu un Box Collider 2D.
  9. Aneu a Actius> Crea> Material de física 2D Mireu la imatge 1
  10. canvieu el nom per "rebotar"
  11. Canvieu la fricció a zero de l’inspector
  12. Canvieu el rebot a 1 de l'inspector
  13. Arrossegueu i deixeu anar "rebot" a Rigidbody 2D> Material Mireu la imatge 2
  14. Seleccioneu "bola" de nou a la jerarquia i aneu a afegir component i escriviu Ball_movement i premeu Retorn.
  15. Feu clic amb el botó dret a l’escriptura i seleccioneu edita l’escriptura.
  16. Copieu el codi següent i premeu F5 per crear-lo i executar-lo.

Codi:

utilitzant System. Collections;

utilitzant System. Collections. Generic; utilitzant UnityEngine; classe pública Ball_movement: MonoBehaviour {// Start es diu abans de la primera actualització de fotogrames private float force = 2; void Start () {StartCoroutine (move ()); } IEnumerator move () {yield return new WaitForSeconds (2); GetComponent (). AddForce (nova Vector2 (1f, 0,5f) * 0,02f * força); }}

Explicació del codi

Aquest codi dóna a la pilota una velocitat en ambdues direccions la direcció X i la direcció Y amb la mateixa magnitud, cosa que fa que la pilota es mogui en un angle de 45 °. Al pas 8, vam afegir un material de física a la pilota i vam canviar la seva rebotada, cosa que manté el moviment de la pilota durant tot el joc.

Pas 6: finalització del joc

Finalitzant el joc
Finalitzant el joc
Finalitzant el joc
Finalitzant el joc
Finalitzant el joc
Finalitzant el joc
Finalitzant el joc
Finalitzant el joc

Ara hem de fer possible la pèrdua, si executeu el joc, notareu que quan la pilota passa el jugador 1 o el jugador 2, només rebota fora de la frontera i això no és exactament el que necessitem en el nostre joc. En lloc d'això, volem fer un comptador de puntuació que compti la puntuació cada vegada que la pilota xoca amb els límits cap amunt o cap avall i per restablir la posició de la pilota.

  1. Arrossegueu i deixeu anar la bola des de la jerarquia a Project, heu fet una prefabricació de la bola perquè pugueu utilitzar-la més tard.
  2. Feu clic amb el botó dret a la jerarquia i seleccioneu Crea buit. apareixerà un objecte buit, el canviarà de nom a bola reapareix i canviarà la seva posició per ser la mateixa que la de la bola.
  3. Feu clic amb el botó dret a la jerarquia i seleccioneu IU >> Text. Fixeu-vos que el text acompanya un llenç, la posició del text en el joc depèn de la posició del text en el llenç, no de les vores del nostre joc. (Mireu la imatge 1).
  4. Canvieu la posició del text a qualsevol lloc que vulgueu.
  5. Repetiu els passos 3 i 4 de nou per a la puntuació del segon jugador.
  6. Escriviu el primer text "Puntuació del jugador 1: 0" i escriviu el segon text "Puntuació del jugador 2: 0". (Mireu la imatge 2).
  7. Creeu un script a la vora superior anomenat p1wins i copieu el codi següent.

Codi:

utilitzant System. Collections;

utilitzant System. Collections. Generic; utilitzant UnityEngine; utilitzant UnityEngine. SceneManagement; utilitzant UnityEngine. UI; classe pública p1wins: MonoBehaviour {puntuació de text pública; public Transform ball_respawn; bola pública de GameObject; private int p1 = 0; // Inici es diu abans de la primera actualització de fotograma void Inici () {} // Actualització es diu una vegada per cada fotograma void Actualització () {score.text = "Puntuació del jugador 1:" + p1; } void OnCollisionEnter2D (Collision2D other) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p1 ++; Instanciar (pilota, pilota_respawn.posició, pilota_respawn.rotació); }}}

8. Arrossegueu i deixeu anar la prefabricació de la bola des del projecte al pas 1 al paràmetre Bola. (Mireu la imatge 3)

9. Arrossegueu i deixeu anar la pilota respawn des de la jerarquia al paràmetre Ball-rerspawn. (Mireu la imatge 3)

10. arrossegueu i deixeu anar la puntuació del jugador 1 des de la jerarquia fins al paràmetre Puntuació. (Mireu la imatge 3)

Explicació del codi:

Quan la pilota xoca amb la vora superior, es destrueix i torna a reaparèixer a la posició ball_respawn que hem assignat al pas 2. l'objectiu de convertir la pilota en prefabricat és poder-la reaparèixer amb totes les seves característiques, en cas contrari, si utilitzem la pilota des de la jerarquia tornarà a aparèixer però no es mourà. També quan la pilota xoca amb la vora superior, un valor que originalment és igual a 0 anomenat p1 augmenta en 1. aquest valor es mostra com a text, de manera que quan la pilota xoca amb la vora superior, la puntuació del jugador 1 augmenta en 1.

Ara feu els passos 7, 8, 9 i 10 per a la vora inferior

per al pas 7, creeu un script anomenat p2wins i copieu el codi següent.

per al pas 10, arrossegueu i deixeu anar la puntuació del jugador 2 des de la jerarquia fins al paràmetre Puntuació.

Codi:

utilitzant System. Collections;

utilitzant System. Collections. Generic; utilitzant UnityEngine; utilitzant UnityEngine. SceneManagement; utilitzant UnityEngine. UI; classe pública p2wins: MonoBehaviour {puntuació de text pública; public Transform ball_respawn; bola pública de GameObject; private int p2 = 0; // Start es diu abans de la primera actualització de frame void Start () {} // Actualització es diu una vegada per frame void Update () {score.text = "Puntuació del jugador 2:" + p2; } void OnCollisionEnter2D (Collision2D other) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p2 ++; Instanciar (pilota, pilota_respawn.posició, pilota_respawn.rotació); }}}

Recomanat: