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

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

¿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 de Unity. Este controlador funcionará con un Arduino Uno, aunque también puede usar una de las muchas alternativas disponibles para este proyecto. También crearemos un juego básico en el que utilizarás tu mando para evitar la caída de objetos y ralentizar el tiempo.





Para este proyecto necesitará

  • Arduino o microcontrolador similar
  • 1 x resistencia de 10 k ohmios
  • 1 x interruptor momentáneo
  • 1 x potenciómetro
  • Cables de conexión
  • Una placa de pruebas
  • Motor de juego de Unity
  • El complemento Uniduino de Unity Asset Store ($ 30)
  • Código completo del proyecto, en caso de que no desee 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 el mejor para usted.





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

Ensamblar su controlador

Configure su placa de pruebas 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 exactamente la misma configuración que un Controlador midi de bricolaje ¡también!



Preparando su Arduino

Una vez que tenga todo cableado, 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 un poco, consulte nuestro Guía para principiantes para ayudarte a que hable bien con tu computadora.





Configuración de su proyecto de Unity

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

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





Podemos usar este mismo panel de prueba para probar nuestro controlador. Establezca el pin D2 en INPUT y Digital. Más abajo, establezca el Pin A5 en ANALÓGICO. 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 esquivar muy simple para probar nuestro nuevo sistema de control. Pasaremos por la configuración del juego con bastante rapidez, por lo que si eres totalmente nuevo en el motor de Unity, puedes encontrar nuestro Guía para principiantes de programación de juegos de Unity útil para orientarse.

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

Cree una nueva escena y arrastre el prefabricado Uniduino desde Activos> Uniduino> Prefabricados a 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 moverla a la parte inferior de la pantalla del juego.

Es hora de empezar a programar

Ahora para agregar algo de 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 la ventana del inspector. Nombralo esferaMover y seleccione C agudo en 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:

|_+_|

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 utilizado el

Métodos Start y ConfigurePins para inicializar nuestro Arduino en tiempo de ejecución. Guardemos nuestro script, regresemos al editor de Unity y veamos qué ha cambiado.

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

Primeros signos de vida

Es hora de ver los valores de nuestro Arduino dentro del Editor de Unity. Por ahora, podemos agregar una línea de código a la función Actualizar de la secuencia de comandos de SphereMover y guardar la secuencia de comandos nuevamente.

|_+_|

Ahora que tenemos nuestra variable potValue actualizándose en cada fotograma, podemos ver su valor en tiempo real en Unity Inspector. Antes de probarlo, ahora sería un buen momento para comprobar 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 ti. Verifique el uso del 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 inicializarse, después de lo cual debería comenzar a ver el cambio de la variable Pot Value en el inspector cuando mueva el potenciómetro.

¡Ahora estamos hablando! Bueno, estrictamente hablando, Unity y Arduino están hablando, pero ¿quién cuenta? Si has llegado hasta aquí y no ves el cambio de valor en el inspector, revisa los pasos de configuración y asegúrate de tener el puerto correcto seleccionado para tu Arduino.

Muevamos esta esfera

Ahora que hemos actualizado nuestra variable potValue, 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 del 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 que 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 hacia la izquierda da un valor de 0, lo que colocaría nuestra esfera justo en el medio 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í son algunas matemáticas.

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

Para aquellos de ustedes que temen mirar un trozo de papel cubierto de números sin sentido (aunque hay algunos grandes sitios web que puede ayudarte a aprender matemáticas), no temas. Necesitamos una forma de hacer que los valores de nuestro potenciómetro 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 ser usados ​​en nuestro esferaMover texto. En la parte superior del panel Proyecto, haga clic en Crear> Script de C # y asígnele el nombre ExtensionMethods. Ingrese el siguiente código en el script:

|_+_|

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

El mensaje nos muestra que nuestro Reasignar toma dos conjuntos de valores Desde y Hasta, y los mapea juntos. Podemos introducir nuestros valores en esto.

|_+_|

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 corresponder 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 nota que sus valores están invertidos, por lo que cuando su potenciómetro está completamente a la derecha, obtiene un valor negativo para su variable Mapped Pot, es posible que tenga su potenciómetro configurado al revés. Afortunadamente, puede solucionar este problema 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:

cómo recuperar tu racha rápida
|_+_|

Guarde su script, regrese al editor de Unity y presione reproducir. ¡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 ralentizar un poco las cosas cuando nos encontramos en una situación difícil? Usaremos nuestro botón para ralentizar el tiempo en nuestro juego. Abra su script de SphereMover y agregue este código a su función Actualizar

|_+_|

Ahora que tenemos la mecánica de nuestro juego, ¡agreguemos algunos obstáculos! Vamos a utilizar 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 del cuerpo rígido en 5. Además, en el componente Box Collider del inspector, seleccione Is Trigger. Esto nos permitirá detectar colisiones con nuestra Esfera.

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

|_+_|

OnTriggerEnter envía un mensaje cada vez que el colisionador de gatillo 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 de 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 una casa prefabricada y la hemos guardado en nuestro proyecto. Elimine su cubo de la jerarquía ahora.

Todo lo que necesitamos ahora es un script para generar los cubos. En la jerarquía, haga clic en 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:

|_+_|

Guarde el guión. De vuelta en el editor, seleccione Game Manager en la jerarquía y arrastre su cubo prefabricado desde el panel del proyecto a la variable Cube en el Inspector. Complete aquí también los valores para su desove. Puedes jugar con él para hacerlo tan fácil o difícil como quieras. Tenga en cuenta que vale la pena que sus cubos más bajos se generen 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 presione reproducir, los cubos aparecerán sobre usted 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 Jams de juegos que se especializan en controladores personalizados .

Con Arduino y Unity puedes crear un controlador personalizado desde casi cualquier cosa. ¿Ha creado un equipo de alta fidelidad 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!

Cuota Cuota Pío Correo electrónico 6 alternativas audibles: las mejores aplicaciones de audiolibros gratuitas o económicas

Si no te apetece pagar por audiolibros, aquí tienes algunas aplicaciones geniales que te permiten escucharlos gratis y legalmente.

Leer siguiente
Temas relacionados
  • Bricolaje
  • Programación
  • Arduino
  • Control de juego
  • Desarrollo de juegos
Sobre el Autor Ian Buckley(216 Artículos publicados)

Ian Buckley es un periodista, músico, intérprete y productor de video independiente que vive en Berlín, Alemania. Cuando no está escribiendo o en el escenario, está jugando con la electrónica o el código de bricolaje con la esperanza de convertirse en un científico loco.

Más de Ian Buckley

Suscríbete a nuestro boletín

¡Únase a nuestro boletín de noticias para obtener consejos técnicos, reseñas, libros electrónicos gratuitos y ofertas exclusivas!

Haga clic aquí para suscribirse