Cómo hacer un controlador de juego personalizado con Arduino y Unity

  • Peter Holmes
  • 0
  • 3562
  • 719
Anuncio

¿Alguna vez has querido diseñar tu propio controlador de juego? Es más fácil de lo que piensas!

En este breve proyecto, crearemos un controlador de juego personalizado simple para usar con el motor de juego Unity. Este controlador estará alimentado por un Arduino Uno, aunque podría utilizar una de las muchas alternativas Guía de compra de Arduino: ¿Qué placa debería obtener? Guía de compra de Arduino: ¿Qué placa debería obtener? Hay tantos tipos diferentes de placas Arduino por ahí, que te perdonarían por estar confundido. ¿Cuál deberías comprar para tu proyecto? ¡Permítanos ayudarlo con esta guía de compra de Arduino! por ahí para este proyecto también. También crearemos un juego básico en el que usarás tu controlador para evitar la caída de objetos y ralentizar el tiempo..

Para este proyecto necesitarás

  • Arduino o microcontrolador similar
  • 1 x resistencia de 10k ohmios
  • 1 x interruptor momentáneo
  • 1 x potenciómetro
  • Cables de conexión
  • Un tablero
  • Motor de juego Unity
  • El complemento Uniduino de Unity Asset Store ($ 30)
  • Código de proyecto completo, en caso de que no quiera escribirlo (no incluye el complemento Uniduino)

La mayoría de estas cosas están disponibles en un kit de inicio Arduino. Si no tiene un kit de inicio, consulte nuestra guía para elegir los mejores 4 Mejores kits de inicio para principiantes de Arduino 4 Mejores kits de inicio para principiantes de Arduino Hay muchos proyectos excelentes para principiantes que puede usar para comenzar, pero Necesita un Arduino y algunos componentes primero. Aquí está nuestra selección de 4 de los mejores kits de inicio para ... uno para ti.

Puede hacer que su controlador sea tan complicado como desee, aunque para este ejemplo configuraremos un potenciómetro y un botón, perfecto para controlar un juego arcade simple.

Ensamblar su controlador

Configure su placa de prueba y Arduino como se muestra en la imagen a continuación. Esto es lo que usaremos como nuestro controlador de juego, aunque podría usar casi la misma configuración que un controlador midi de bricolaje Cómo hacer un controlador MIDI con un Arduino Cómo hacer un controlador MIDI con un Arduino Como músico que ha acumulado Una colección de instrumentos musicales y cajas de ruido, el humilde Arduino es la herramienta perfecta para crear un controlador MIDI personalizado. también!

Preparando tu Arduino

Una vez que tenga todo conectado, conecte su Arduino a través de USB. En Arduino Software IDE diríjase a Herramientas> Tablero y Herramientas> Puerto para seleccionar qué microcontrolador y puerto está utilizando. El IDE de Arduino viene incluido con el boceto que necesitamos, y puede encontrarlo en Archivo> Ejemplos> Firmata> StandardFirmata. Haga clic en Cargar y estará listo para comenzar..

Si es nuevo en Arduino y su cabeza se está derritiendo ligeramente, consulte nuestra Guía para principiantes Introducción a Arduino: Una Guía para principiantes Introducción a Arduino: Una Guía para principiantes Arduino es una plataforma de creación de prototipos de electrónica de código abierto basada en un sistema flexible y fácil de usar. utilizar hardware y software Está destinado a artistas, diseñadores, aficionados y cualquier persona interesada en crear objetos o entornos interactivos. para ayudarte a hablar bien con tu computadora.

Configurando su proyecto de unidad

En Unity, abre Ventana> Tienda de activos para acceder a la Tienda de activos de Unity desde el Editor de Unity. Busque en el Asset Store el complemento Uniduino. Este complemento le permitirá recibir y enviar datos hacia y desde sus pines Arduino dentro de Unity. El complemento al momento de escribir cuesta $ 30. Es posible hacer este proyecto sin comprar el complemento, aunque es bastante más complicado y puede encontrar el complemento más conveniente en general.

Este video de los creadores del complemento lo lleva a través del proceso de probar que todo funciona, junto con la configuración por primera vez. Tenga en cuenta que también es posible que deba restablecer el editor de Unity en Windows.

Podemos usar este mismo panel de prueba para probar nuestro controlador. Establezca el Pin D2 en ENTRADA y Digital. Más abajo, configure el Pin A5 en ANALOG. Su potenciómetro y botón deberían mostrar valores en la pantalla junto a sus números de pin ahora. Progreso!

Ahora para hacer algo que podamos controlar

Entonces tenemos un controlador, pero ¿qué controlaremos? Bueno, las posibilidades son infinitas, pero por hoy crearemos un juego de evasión muy simple para probar nuestro nuevo sistema de control. Avanzaremos rápidamente por la configuración del juego, por lo que si eres totalmente nuevo en el motor de Unity, puedes encontrar nuestra Guía de principiantes de programación de juegos de Unity. Programación de un juego con Unity: Guía de principiantes. Programación de un juego con Unity: una guía de principiantes. En el panorama del desarrollo de juegos independientes, Unity se ha convertido en una especie de estándar de facto: su bajo costo, facilidad de uso y amplio conjunto de características lo hacen ideal para el desarrollo rápido de juegos. útil para orientarse.

Construiremos un juego muy básico en el que tu objetivo es esquivar tu esfera a izquierda y derecha para evitar la caída de cubos, que utilizará tu controlador personalizado recién creado.

Cree una nueva escena y arrastre el prefab Uniduino desde Activos> Uniduino> Prefabricados en su jerarquía y arrastre el prefabricado Uniduino a la jerarquía. Lo necesitamos allí para hablar entre nuestro juego y el controlador.

En la jerarquía de Unity, haga clic en Crear> Esfera y usa la pestaña Transformar en el Inspector para moverlo a la parte inferior de la pantalla del juego.

Es hora de obtener codificación

Ahora para agregar un código a esta fiesta. Con la esfera seleccionada en la Jerarquía, haga clic en Agregar componente> Nuevo script en la parte inferior de su ventana de Inspector. Nombralo esferaMover y seleccione C Sharp desde el menú desplegable. Hacer clic Crear y agregar y el script se agregará al GameObject. Haga doble clic en él para abrir el script e ingrese este código:

usando UnityEngine; usando System.Collections; usando Uniduino; public class sphereMover: MonoBehaviour // Los encabezados no son estrictamente necesarios, pero hacen la vida más fácil en el Inspector. [Encabezado ("Variables de Arduino")] // necesitamos declarar el Arduino como una variable pública Arduino arduino; // necesitamos declarar un número entero para el número de pin de nuestro potenciómetro, // hacer públicas estas variables significa que podemos cambiarlas en el editor más adelante // si cambiamos el diseño de nuestro arduino public int potPinNumber; // una variable flotante para mantener el valor del potenciómetro (0 - 1023) public float potValue; // luego reasignaremos ese potValue a la posición y de nuestra cápsula y lo mantendremos en esta variable public float mappedPot; // public int para nuestro pin pin public int buttonPinNumber; [Encabezado ("Variables de esfera")] // variables para mantener los valores que anotamos anteriormente para los lados de nuestra pantalla public float leftEdge; flotador público rightEdge; // Use esto para la inicialización void Start () // e inicialicemos, comenzando con la variable Arduino. // solo estamos usando un arduino, por lo que podemos usar Arduino.global para agarrarlo. arduino = Arduino.global; arduino.Setup (ConfigurePins);  void ConfigurePins () // configura el pin Arduino para que sea analógico para nuestro potenciómetro arduino.pinMode (potPinNumber, PinMode.ANALOG); // Dile al Arduino que informe cualquier cambio en el valor de nuestro potenciómetro arduino.reportAnalog (5, 1); // configurar nuestro Pin pin arduino.pinMode (buttonPinNumber, PinMode.INPUT); arduino.reportDigital ((byte) (buttonPinNumber / 8), 1); 

Tómese un momento para leer los comentarios del código. Hasta ahora, hemos declarado algunas variables para nuestro Arduino, sus pines y nuestra Esfera. También hemos usado el
Inicie y configure los métodos de Pines para inicializar nuestro Arduino en tiempo de ejecución. Vamos a guardar nuestro script y volver al editor de Unity y ver qué ha cambiado..

Ahora podemos ver nuestras variables públicas en la ventana del Inspector. Veamos en qué podemos ingresar en esta etapa para ayudarnos más adelante. Sabemos qué pines estamos usando en el Arduino de nuestra compilación anterior, podemos ingresarlos. También sabemos por nuestro experimento anterior hasta qué punto queremos que nuestra esfera pueda viajar a izquierda y derecha para que no se caiga de la pantalla. Vamos a ingresar estos valores ahora.

Primeras señales de vida

Es hora de ver realmente los valores de nuestro Arduino dentro del Editor de Unity. Por ahora, podemos agregar una línea de código a la función de actualización de nuestro scriptphereMover y guardar el script nuevamente.

void Update () // Asignamos el valor que el arduino está leyendo desde nuestro potenciómetro a nuestra variable potValue potValue = arduino.analogRead (potPinNumber);  

Ahora que tenemos nuestra variable potValue que se actualiza en cada cuadro, podemos ver su valor en tiempo real en el Unity Inspector. Antes de probarlo, ahora sería un buen momento para verificar que el conector Uniduino esté escuchando en el puerto correcto. Haga clic en Uniduino en la Jerarquía y verifique su Nombre de puerto en el Inspector. Si está en blanco, complete el número de puerto correcto para su Arduino. En este caso fue COM4, ​​aunque puede ser diferente para usted. Verifique usando el IDE de Arduino si no está seguro.

Seleccione su esfera en la jerarquía y haga clic en el botón Reproducir en la parte superior de la pantalla. El sistema necesita unos segundos para iniciarse, después de lo cual debe comenzar a ver el cambio de la variable Valor del bote en el inspector cuando mueve el potenciómetro.

¡Ahora estamos hablando! Bueno, estrictamente hablando, Unidad y Arduino están hablando, pero ¿quién está contando? Si ha llegado hasta aquí y no ve el cambio de valor en el inspector, verifique los pasos de configuración y asegúrese de tener seleccionado el puerto correcto para su Arduino.

Vamos a mover esta esfera

Ahora que tenemos la variable potValue siendo actualizada, queremos usar este valor para mover nuestra esfera. Cuando el potenciómetro está completamente a la izquierda, queremos que la esfera esté en el lado izquierdo de la pantalla, y viceversa. Los objetos en Unity se colocan en un punto en el espacio vectorial, determinado por los valores de su Transform.position. En la imagen de abajo, donde la esfera está en el punto más alejado a la izquierda, la queremos, puede ver que su vector de posición es 9.5, -4, 0.

Queremos afectar la posición X de la esfera. Desafortunadamente, usar los valores de nuestro potenciómetro directamente no funcionará, ya que cuando el potenciómetro está completamente a la izquierda, da un valor de 0, lo que colocaría nuestra esfera en el centro de la pantalla. En el otro extremo, el valor máximo del potenciómetro, 1023, colocaría el cubo a la derecha de nuestra pantalla. Inútil. Lo que necesitamos aquí es algo de matemática.

¿Por qué hacer matemáticas cuando la unidad lo hará por usted??

Para aquellos de ustedes que temen mirar un pedazo de papel cubierto de números sin sentido (aunque hay algunos sitios web geniales Los 20 sitios web que necesita aprender matemáticas paso a paso Los 20 sitios web que necesita aprender matemáticas paso a paso Hemos compilado el mejores sitios para cada nivel para que pueda aprender sistemáticamente, obtener una mejor comprensión de las matemáticas de un nivel a la vez y divertirse que puede ayudarlo a aprender matemáticas), no temas. Necesitamos una forma de hacer que nuestros valores de potenciómetros se correspondan con la posición X de nuestra esfera. Afortunadamente, podemos usar un Método de extensión.

Un método de extensión es un script que hace un trabajo específico para nosotros. En este caso, le damos los valores que tenemos, y los devuelve mapeados entre sí, listos para usar en nuestro esferaMover guión. En la parte superior del panel Proyecto, haga clic en Crear> Script de C # y nómbralo ExtensionMethods. Ingrese el siguiente código en el script:

usando UnityEngine; usando System.Collections; public static class ExtensionMethods // nuestra práctica función Remapper dandy public static float Remap (este valor flotante, flotante de1, flotante a1, flotante de2, flotante a2) return (value - from1) / (to1 - from1) * (to2 - desde2) + desde2; 

Guarde la secuencia de comandos y regrese a la secuencia de comandos de esfera. Ahora podemos usar esta función Remap en nuestro script de ExtensionMethods en nuestra función Update para convertir nuestros valores de potenciómetro en valores utilizables en nuestro juego. En donde acabamos de asignar la variable potValue, escriba lo siguiente:

El mensaje nos muestra que nuestro Remap toma dos conjuntos de valores From y To, y los asigna juntos. Podemos ingresar nuestros valores en esto.

mappedPot = potValue.Remap (0, 1023, leftEdge, rightEdge);

Guarde su script, regrese al editor de Unity y presione el botón de reproducción. Ahora debería ver que la variable Mapped Pot cambia cuando mueve el potenciómetro, para que se corresponda con los valores que determinamos para nuestros bordes izquierdo y derecho. Tómese un momento para sentarse y agradecer a su script ExtensionMethods. No hay una calculadora a la vista.

Nota: si observa que sus valores están invertidos, de modo que cuando su potenciómetro está completamente a la derecha, obtiene un valor negativo para su variable Mapped Pot, puede hacer que su potenciómetro se configure de forma incorrecta. Afortunadamente, puedes arreglar esto sin tener que volver a cablear. Simplemente puede cambiar los valores cuando los reasigna:

Ahora finalmente tenemos valores utilizables. Ahora todo lo que queda por hacer es asignar esos valores a la posición X de nuestra esfera:

// Asigna el valor de mapeo asignado a la posición x de la esfera transform.position = new Vector3 (mappedPot, transform.position.y, transform.position.z);

Guarde su script, regrese al editor de Unity y presione play. Ahora debería poder mover su Esfera hacia la izquierda y hacia la derecha usando su potenciómetro!

Poner el botón a trabajar

Ahora que tenemos nuestra esfera en movimiento, ¿no sería bueno tener una forma de desacelerar un poco las cosas cuando nos encontramos en una situación difícil? Vamos a usar nuestro botón para ralentizar el tiempo en nuestro juego. Abra su script sphereMover y agregue este código a su función Actualizar

// si Unity detecta que se está presionando el botón, la escala de tiempo se ralentiza si (arduino.digitalRead (buttonPinNumber) == 1) Time.timeScale = 0.4f;  más Time.timeScale = 1.0f;

Ahora que tenemos la mecánica de nuestro juego, ¡agreguemos algunos obstáculos! Vamos a usar el enemigo natural de la esfera, el cubo. En la jerarquía, haga clic en Crear> Objeto 3d> Cubo. En el inspector del cubo, Agregar componente> Física> Cuerpo rígido. Establezca el valor de Arrastrar el cuerpo rígido en 5. Además, en el componente Recopilador de cuadros en el inspector, seleccione Is Trigger. Esto nos permitirá detectar colisiones con nuestra Esfera..

Crea un script en el cubo y llámalo colisionar con Oracle, abra el script y elimine las funciones de Inicio y Actualización ya que no las necesitaremos esta vez. Ingrese este código:

usando UnityEngine; usando System.Collections; clase pública collideWithSphere: MonoBehaviour void OnTriggerEnter (Collider other) Destroy (other.gameObject); 

OnTriggerEnter envía un mensaje cada vez que el colisionador de disparo golpea a otro colisionador. En este caso, le estamos diciendo que destruya todo lo que toque. Guarde el script y regrese al editor de Unity. Arrastre el cubo desde la jerarquía al panel Proyecto. Notarás que el texto del cubo en la jerarquía se ha vuelto azul. Esto se debe a que hemos creado un prefabricado y lo hemos guardado en nuestro proyecto. Elimina tu cubo de la jerarquía ahora.

Todo lo que necesitamos ahora es un script para generar los cubos. En la jerarquía haga clic Crear> Crear vacío, y cámbiele el nombre a Game Manager en el Inspector y agregue un script llamado gameManager. Abra el script y agregue este código:

usando UnityEngine; usando System.Collections; gameManager de clase pública: MonoBehaviour // una variable para contener el prefabricado que queremos generar en el cubo público de GameObject; // queremos que algunas variables decidan cómo se generan los cubos // y qué tan alto sobre nosotros queremos que generen public int numberToSpwan; flotante pública menor altura de engendro; flotador público de mayor altura de engendro; // Use esto para la inicialización void Start () for (int i = 0; i < numberToSpwan; i++)  Instantiate(cube, new Vector3(Random.Range(-9, 9), Random.Range(lowestSpawnheight, highestSpawnheight), 0), Quaternion.identity);   // Update is called once per frame void Update ()   

Guarda el guión. De vuelta en el editor, seleccione el Game Manager en la jerarquía y arrastre su cubo prefabricado desde el panel del proyecto a la variable Cubo en el Inspector. Rellene los valores para su desove aquí también. Puedes jugar con él para hacerlo tan difícil o fácil como quieras. Tenga en cuenta que vale la pena que sus cubos más bajos aparezcan lo suficientemente alto como para permitir que Uniduino se inicialice; perder el juego antes de que pueda moverse puede ser frustrante!

El proyecto terminado

Ahora cuando presionas play, los cubos aparecerán sobre ti y caerán. Puede usar su potenciómetro para evitarlos y su botón para ralentizar el tiempo.

En este proyecto, creamos un controlador personalizado con un Arduino, configuramos Unity y Uniduino para comunicarse con él, y creamos un juego simple para probarlo. Los conceptos aquí se pueden aplicar a casi cualquier proyecto, e incluso hay atascos de juegos que se especializan en controladores personalizados.

Con Arduino y Unity puedes crear un controlador personalizado desde casi cualquier cosa. ¿Has creado un equipo de música que controla una nave espacial? Una tostadora que controla un juego de plataformas.?

Si has hecho un proyecto como este, ¡me encantaría verlo! Publícalo en los comentarios a continuación!




Nadie ha comentado sobre este artículo todavía.

Sobre tecnología moderna, simple y asequible.
Tu guía en el mundo de la tecnología moderna. Aprenda a usar las tecnologías y los dispositivos que nos rodean todos los días y aprenda a descubrir cosas interesantes en Internet.