Tabla de contenido:

Cómo hacer un juego multijugador con controladores Arduino: 6 pasos
Cómo hacer un juego multijugador con controladores Arduino: 6 pasos

Video: Cómo hacer un juego multijugador con controladores Arduino: 6 pasos

Video: Cómo hacer un juego multijugador con controladores Arduino: 6 pasos
Video: MINIJUEGO con ARDUINO para MEJORAR LA MEMORIA || SIMON DICE || [proyecto explicado paso a paso] 2024, Mes de julio
Anonim
Cómo hacer un juego multijugador con controladores Arduino
Cómo hacer un juego multijugador con controladores Arduino

¿Alguna vez te has preguntado cómo los desarrolladores de juegos crean juegos increíbles que la gente de todo el mundo disfruta jugando? Bueno, hoy te voy a dar solo una pequeña pista al respecto haciendo un pequeño juego multijugador que será controlado por un controlador Arduino que tú también harás. Entonces, comencemos.

Suministros

Necesitará:

  • Un ordenador portátil
  • Motor de unidad
  • Un IDE de C # que funciona con Unity, como Visual Studio o Atom. (Usaré código de Visual Studio)
  • 2X Arduino Nano
  • Tabla de pan grande 2X
  • Tabla de pan pequeña 2X
  • Interruptor de tachuela 4X (botón pulsador)
  • Resistencia 4X 200Ω
  • 12 cables de puente macho a macho
  • IDE de Arduino

Será útil si tiene un conocimiento básico del uso de Unity, sin embargo, no afectará su progreso, ya que se familiarizará con él mientras continúa con la creación del juego.

Enlace para descargar Unity Engine:

store.unity.com/download-nuo

Enlace para descargar Visual Studio Code IDE:

code.visualstudio.com/download

Enlace para descargar Arduino IDE:

www.arduino.cc/en/Main/Software

Paso 1: configura las fronteras del juego

Configura las fronteras del juego
Configura las fronteras del juego
Configura las fronteras del juego
Configura las fronteras del juego
Configura las fronteras del juego
Configura las fronteras del juego

En primer lugar, debes descargar la unidad

Una vez hecho esto, puedes comenzar a configurar la vista de tu juego.

Abra un nuevo proyecto de Unity, asígnele un nombre y seleccione un juego 2D.

Cuando se abre el proyecto, observe que hay 3 secciones principales llamadas

  • Jerarquía (aquí es donde se agregarán todos los objetos y detalles del juego).
  • Escena (donde configuras la vista del juego).
  • Juego (donde puedes probar cómo será el juego real).

Observe que debajo de la jerarquía está su escena y debajo de la escena está la "Cámara principal". Cuando seleccione la cámara de la jerarquía, se seleccionará en la escena

(Todo lo que esté dentro de los límites de esta cámara se mostrará en el juego real).

Mira la imagen 1

Nuestro juego consta de dos tableros, una pelota que se mueve alrededor y bordes que limitan el movimiento de los tableros y la pelota.

Comencemos por crear las fronteras.

  1. Para crear un nuevo objeto de juego, selecciona Activos> Crear> Sprites> cuadrado (llámalo "bordes derecho e izquierdo") Mira la imagen 2
  2. Arrastre y suelte los bordes derecho e izquierdo a la jerarquía y aparecerá un cuadrado en la escena.
  3. Ajuste su posición del eje x a (5) “bordes derecho e izquierdo”> inspector> transformar> posición> X. Mira la imagen 3
  4. Luego, ajuste su escala para que sea lo suficientemente grande como para cubrir los bordes de la cámara (arrastre los lados superior e inferior del cuadrado para estirarlo).
  5. Ajusta su color "desde los bordes derecho e izquierdo"> inspector> renderizado de sprites> color. Mira la imagen 3
  6. Desplácese hacia abajo en el inspector y seleccione agregar componente, luego escriba Rigidbody2D y presione enter, esto básicamente agregará física a su objeto de juego, ya que le brinda detección de masa, gravedad y colisión. Sin embargo, no necesitamos la gravedad en nuestro juego, así que haz que la gravedad sea 0 en lugar de 1. También necesitarás congelar la posición y la rotación para que el borde no se mueva cuando choca. Mira la imagen 4
  7. seleccione agregar componente, luego escriba Box Collider 2D y presione enter. Esto agregará un área alrededor del objeto del juego donde se pueden detectar colisiones. Mira la imagen 4
  8. Ahora seleccione los bordes derecho e izquierdo y presione (ctrl + d) para duplicarlo.
  9. Cambie el nombre de "borde izquierdo" y cambie el nombre del primero ("borde derecho").
  10. Seleccione el borde izquierdo y ajuste su posición en el eje x a (-5) de la misma manera en el paso 3. Ahora tiene los bordes derecho e izquierdo.

Repita los 10 pasos anteriores con los bordes hacia arriba y hacia abajo y cambie la posición y del cuadrado en lugar de la posición x. La vista previa final debería ser algo similar a la de la imagen.

Mira la imagen 5

Paso 2: agregar placas y crear controladores

Agregar tableros y hacer controladores
Agregar tableros y hacer controladores
Agregar tableros y hacer controladores
Agregar tableros y hacer controladores
Agregar tableros y hacer controladores
Agregar tableros y hacer controladores

Agregar tableros

Crea un nuevo objeto de juego y nómbralo jugador 1.

Ajustar:

  • Escala: X (1.2), Y (0.15), Z (1)
  • Posición: X (0), Y (-3.6), z (0)
  • Agregar BoxCollider2D
  • Agregue Rigidbody 2D y congele los ejes yy z.

Duplique (ctrl + d) y cambie el nombre del reproductor de copia 2.

Ajustar:

  • Escala: X (1.2), Y (0.15), Z (1)
  • Posición: X (0), Y (3.6), z (0)
  • Un BoxCollider ya estará allí.
  • Un Rigidbody 2D ya estará allí y los ejes yyz ya estarán congelados.

Mira la imagen 1

Haciendo controladores

Necesitará:

  • 2X Arduino Nano
  • Tabla de pan grande 2X
  • Tabla de pan pequeña 2X
  • Interruptor de tachuela 4X (botón pulsador)
  • Resistencia 4X
  • 12 cables de puente macho a macho

Ahora mire las fotos del tablero de pruebas y el mapeo para ensamblar los joysticks.

  1. Adjunte un chip Arduino Nano con una placa de pan pequeña.
  2. Coloque 2 interruptores de tachuela en el tablero de pan grande como se muestra en la imagen. Intente mantener el lado derecho del tablero de pan simétrico al de la izquierda, ya que esto hará que el joystick se vea mejor (puede usar la columna 30 como simetría línea)
  3. Conecte el pin superior izquierdo del botón izquierdo con el pin de 5V en el Arduino en la placa de pan pequeña (las cosas que están conectadas con la misma columna en la placa de pruebas están conectadas entre sí).
  4. Conecte el pin superior derecho del botón derecho con el pin de 5V en el Arduino.
  5. Conecte el pin inferior derecho del botón izquierdo con un punto en la columna 31 usando una resistencia.
  6. Conecte el pin inferior izquierdo del botón derecho con un punto en la columna 29 usando una resistencia.
  7. Conecte las resistencias con el pin GND en el Arduino.
  8. Conecte el pin superior derecho del botón izquierdo con el pin D3 en el Arduino.
  9. Conecte el pin superior izquierdo del botón derecho con el pin D9 en el Arduino.
  10. Ahora repite estos pasos y crea el segundo controlador.

Paso 3: Conexión de Arduino al puerto serie

Conexión de Arduino al puerto serie
Conexión de Arduino al puerto serie
Conexión de Arduino al puerto serie
Conexión de Arduino al puerto serie
Conexión de Arduino al puerto serie
Conexión de Arduino al puerto serie
Conexión de Arduino al puerto serie
Conexión de Arduino al puerto serie

En primer lugar, deberá instalar el IDE de Arduino.

Una vez que estén instalados, puede comenzar creando un programa Arduino que reciba entradas de los botones y las almacene en un puerto serie (puerto COM). Cuando se conecta una placa Arduino a su computadora portátil, el sistema operativo reconoce automáticamente la placa como un puerto serie, en el que se pueden cargar programas. Los valores almacenados en el puerto serie se pueden usar en el siguiente paso cuando conectamos Unity Engine con el puerto serie.

Ahora conectemos el Arduino con el puerto serie.

Mira las fotos

  1. Conecte un Arduino con su computadora portátil
  2. Herramientas> Tablero> Arduino Nano
  3. Si su chip Arduino es reciente (2018-2020) Herramientas> Procesador> ATmega328P (Cargador de arranque antiguo).
  4. Si su chip Arduino no es reciente (antes de 2018) Herramientas> Procesador> ATmega328P
  5. Herramientas> Puerto> COM (cualquier número que aparezca, en mi caso es 10). * Este es el puerto serie donde se almacenarán los valores.
  6. Copie el código y péguelo en el IDE de Arduino y presione ctrl + u para cargar el programa.
  7. Repite con el segundo Arduino. (al realizar el paso 5, asegúrese de elegir otro puerto COM para que ambos controladores no se conecten al mismo puerto serie).

Código:

configuración vacía () {

Serial.begin (9600); pinMode (3, ENTRADA); // Decirle al Arduino que reciba una entrada del pin D3 pinMode (9, INPUT); // Decirle al Arduino que reciba una entrada del pin D9} void loop () {if (digitalRead (3) == 1) {/ * Si el Arduino recibe una entrada de 1 Serial.write (1); desde el pin 3 Salida un valor de 1 al puerto serial Serial.flush (); * / retraso (2); } if (digitalRead (9) == 1) {/ * Si el Arduino recibe una entrada de 1 Serial.write (2); desde el pin 9 Envía un valor de 2 al puerto serie Serial.flush (); * / retraso (2); }}

Explicación del programa:

Este código simplemente toma una entrada del pin D3 y el pin D9 en el Arduino, que están conectados a los botones. Los botones están presionados o sin presionar, lo que significa que las lecturas que se toman de ellos son 1 (presionados) o 0 (sin presionar). Si la entrada del botón derecho (desde D9) es 1 (presionado), almacene un valor de 1 en el puerto serial. Si la entrada del botón izquierdo (desde D3) es 1 (presionado), almacene un valor de 2 en el puerto serial.

Paso 4: Conexión de Unity con el puerto serie

Conexión de Unity con el puerto serie
Conexión de Unity con el puerto serie
Conexión de Unity con el puerto serie
Conexión de Unity con el puerto serie

Para este paso vamos a identificar el puerto serie en Unity para que pueda recibir las entradas de Arduino cuando se presionan los botones. Instale Visual Studio Code en su computadora portátil. Luego vaya a Unity, seleccione el jugador 1 de la jerarquía, desplácese hacia abajo y seleccione agregar componente y escriba player1_motion y luego presione enter. Mira la imagen 1

Se creará un script C # en el inspector, haga clic derecho sobre él y seleccione editar script, el código de Visual Studio debería abrirse y mostrará un código predeterminado que se parece a la imagen 2.

Copie el siguiente código y luego cambie "SerialPort sp = new SerialPort (" COM10 ", 9600);" con SerialPort sp = new SerialPort ("Puerto COM al que está conectado su Arduino", 9600); puede encontrar el suyo volviendo a su código Arduino y yendo a Herramientas> Puerto> COM (cualquier número que aparezca).

Código:

usando System. Collections;

utilizando System. Collections. Generic; usando UnityEngine; usando System. IO. Ports; player1_motion de clase pública: MonoBehaviour {velocidad de flotación = 8; flotador privado amounttomove; SerialPort sp = nuevo SerialPort ("COM10", 9600); // Se llama al inicio antes de la actualización del primer cuadro void Start () {sp. Open (); sp. ReadTimeout = 1; } // La actualización se llama una vez por cuadro void Update () {amounttomove = speed * 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 (Dirección == 2) {transform. Translate (Vector3.right * amounttomove, Space. World); }}}

Explicación del código:

Este código le dice a la unidad que reciba entradas del puerto serie (COM 10). Cuando se presiona el botón izquierdo, el Arduino envía un valor de 1 al puerto serie, si la unidad recibe 1 del puerto serie, se agrega una velocidad al objeto de juego "jugador 1" en la dirección izquierda. Cuando se presiona el botón derecho, el Arduino envía un valor de 2 al puerto serie, si la unidad recibe 2 del puerto serie, se agrega una velocidad al objeto de juego "jugador 1" en la dirección correcta. si el puerto serie no recibe un valor del puerto serie, no se agrega velocidad en ninguna dirección, por lo tanto, la placa permanece estacionaria.

Después de copiar el código, presione F5 para compilar y ejecutar el código. Regrese a la unidad y presione el botón de reproducción, el jugador 1 debe moverse hacia la derecha cuando presione hacia la derecha y hacia la izquierda cuando presione hacia la izquierda.

Ahora, realice los mismos pasos una vez más pero con el reproductor 2 y asegúrese de escribir en el 'Agregar componente' player2_motion en lugar de player1_motion e identificar el segundo puerto COM al que está conectado el segundo controlador, no el mismo puerto serie.

También necesitará cambiar "public class player1_motion: MonoBehaviour" a "public class player2_motion: MonoBehaviour" en el código mismo.

Paso 5: agregar la pelota

Añadiendo la bola
Añadiendo la bola
Añadiendo la bola
Añadiendo la bola
Añadiendo la bola
Añadiendo la bola
  1. Agrega un nuevo objeto de juego, pero esta vez elige un círculo en lugar de un cuadrado.
  2. Cambie el nombre de "bola".
  3. Arrastra y suelta en la jerarquía.
  4. Ajuste la escala (X: 0.2 - Y: 0.2 - Z: 0.2).
  5. Agregue un Rigidbody 2D y congele solo el eje Z.
  6. Cambie la masa a 0,0001
  7. Cambie la escala de gravedad a 0.
  8. Agregue un Box Collider 2D.
  9. Vaya a Activos> Crear> Material de física 2D Observe la imagen 1
  10. cambiar su nombre a "rebotar"
  11. Cambie la fricción a cero del inspector.
  12. Cambie el rebote a 1 del inspector
  13. Arrastra y suelta "rebote" en Rigidbody 2D> Material Mira la imagen 2
  14. Seleccione "bola" de nuevo en la jerarquía y vaya a agregar componente y escriba Ball_movement y luego presione enter.
  15. Haga clic derecho en el script y seleccione editar script.
  16. Copie el código a continuación y presione F5 para compilarlo y ejecutarlo.

Código:

usando System. Collections;

utilizando System. Collections. Generic; usando UnityEngine; public class Ball_movement: MonoBehaviour {// Se llama al inicio antes de la actualización del primer marco private float force = 2; void Start () {StartCoroutine (mover ()); } IEnumerator move () {yield return new WaitForSeconds (2); GetComponent (). AddForce (nuevo Vector2 (1f, 0.5f) * 0.02f * force); }}

Explicación del código

Este código le da a la pelota una velocidad en ambas direcciones, la dirección X y la dirección Y con la misma magnitud, lo que hace que la pelota se mueva en un ángulo de 45 °. En el paso 8 agregamos un material de física a la pelota y cambiamos su rebote, esto mantiene el movimiento de la pelota durante todo el juego.

Paso 6: Finalización del juego

Finalizando el juego
Finalizando el juego
Finalizando el juego
Finalizando el juego
Finalizando el juego
Finalizando el juego
Finalizando el juego
Finalizando el juego

Ahora necesitamos hacer posible la pérdida, si ejecuta el juego, notará que cuando la pelota pasa al jugador 1 o al jugador 2, simplemente rebota en el borde y eso no es exactamente lo que necesitamos en nuestro juego. En su lugar, queremos hacer un contador de puntuación que cuente la puntuación cada vez que la bola choca con los bordes hacia arriba o hacia abajo y restablecer la posición de la bola.

  1. Arrastra y suelta la bola de la jerarquía al proyecto. Has hecho una prefabricación de la bola para que puedas usarla más tarde.
  2. Haga clic derecho en la jerarquía y seleccione Crear vacío. Aparecerá un Objeto vacío, cámbiele el nombre a reaparición de la bola y cambie su posición para que sea la misma que la posición de la bola.
  3. Haga clic derecho en la jerarquía y seleccione UI >> Texto. Observe que el texto acompaña a un lienzo, la posición del texto en el juego depende de la posición del texto en el lienzo, no en los bordes de nuestro juego. (Mira la imagen 1).
  4. Cambie la posición del texto a donde quiera que esté.
  5. Repita los pasos 3 y 4 nuevamente para la puntuación del segundo jugador.
  6. Escribe el primer texto "Puntuación del jugador 1: 0" y el segundo texto "Puntuación del jugador 2: 0". (Mira la imagen 2).
  7. Cree un script en el borde superior llamado p1wins y copie el siguiente código.

Código:

usando System. Collections;

utilizando System. Collections. Generic; usando UnityEngine; utilizando UnityEngine. SceneManagement; usando UnityEngine. UI; p1wins de clase pública: MonoBehaviour {puntuación de texto público; public Transform ball_respawn; bola pública de GameObject; privado int p1 = 0; // Se llama al inicio antes de la actualización del primer cuadro void Start () {} // Se llama a la actualización una vez por cuadro void Update () {score.text = "Player 1 Score:" + p1; } void OnCollisionEnter2D (Collision2D otro) {if (otro.gameObject.tag == "Ball") {Destroy (otro.gameObject); p1 ++; Instanciar (bola, ball_respawn.position, ball_respawn.rotation); }}}

8. Arrastre y suelte la bola prefabricada del proyecto del paso 1 en el parámetro Bola. (Mira la imagen 3)

9. Arrastre y suelte la reaparición de la bola desde la jerarquía al parámetro Reaparición de la bola. (Mira la imagen 3)

10. arrastre y suelte la puntuación del jugador 1 de la jerarquía al parámetro Puntuación. (Mira la imagen 3)

Explicación del código:

Cuando la bola choca con el borde superior se destruye y reaparece de nuevo en la posición ball_respawn que le asignamos en el paso 2. el objetivo de convertir la bola en una prefabricada es poder reaparecer con todas sus características, de lo contrario, si usamos la bola reaparecerá de la jerarquía pero no se moverá. Además, cuando la pelota choca con el borde superior, un valor que originalmente es igual a 0 llamado p1 aumenta en 1. Este valor se muestra como texto, por lo que cuando la pelota choca con el borde superior, la puntuación del jugador 1 aumenta en 1.

Ahora realice los pasos 7, 8, 9 y 10 para el borde inferior

para el paso 7, cree un script llamado p2wins y copie el siguiente código en su lugar.

para el paso 10, arrastre y suelte la puntuación del jugador 2 de la jerarquía al parámetro Puntuación.

Código:

usando System. Collections;

utilizando System. Collections. Generic; usando UnityEngine; utilizando UnityEngine. SceneManagement; usando UnityEngine. UI; p2wins de clase pública: MonoBehaviour {puntuación de texto público; public Transform ball_respawn; bola pública de GameObject; privado int p2 = 0; // Se llama al inicio antes de la actualización del primer cuadro void Start () {} // Se llama a la actualización una vez por cuadro void Update () {score.text = "Player 2 Score:" + p2; } void OnCollisionEnter2D (Collision2D otro) {if (otro.gameObject.tag == "Ball") {Destroy (otro.gameObject); p2 ++; Instanciar (bola, ball_respawn.position, ball_respawn.rotation); }}}

Recomendado: