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, construiremos un sencillo controlador de juego personalizado para usar con el motor de juego Unity. Este controlador estará alimentado por un Arduino Uno, aunque podría usar una de las muchas alternativas. Guía de compra de Arduino: ¿Qué placa debería obtener? Guía de compra de Arduino: ¿Qué tabla debería obtener? Hay tantos tipos diferentes de tableros de Arduino por ahí que se te perdonará por estar confundido. ¿Qué debes comprar para tu proyecto? Déjanos ayudarte, con esta guía de compras de Arduino! Lea más 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 potenciometro
- Cables de conexión
- Un tablero
- Motor de juego de la unidad
- El complemento Uniduino de Unity Asset Store ($ 30)
- Complete el código del proyecto, 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 de Arduino para principiantes que puede usar para comenzar, pero Necesito un Arduino y algunos componentes primero. Aquí está nuestra selección de 4 de los mejores kits de inicio para ... Leer más uno para usted.
Puedes hacer que tu controlador sea tan complicado como desees, aunque para este ejemplo configuraremos un potenciómetro y un botón, perfecto para controlar un juego de arcade simple.
Montaje de su controlador
Configura tu tablero y Arduino como se muestra en la imagen de abajo. Esto es lo que usaremos como nuestro controlador de juegos, 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. Leer mas tambien!
Preparando tu arduino
Una vez que tenga todo conectado, conecte su Arduino a través de USB. En Arduino Software IDE dirigirse a Herramientas> Tablero y Herramientas> Puerto para seleccionar el microcontrolador y el puerto que está utilizando. El IDE de Arduino viene con el boceto que necesitamos, y lo puede encontrar en Archivo> Ejemplos> Firmata> EstándarFirmata. Haga clic en Cargar y estará listo para ir.
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 una plataforma flexible y fácil de usar. utilizar hardware y software Está dirigido a artistas, diseñadores, aficionados y cualquier persona interesada en crear objetos o entornos interactivos. Lee más para ayudarte a hablar bien con tu computadora.
Configuración de su proyecto de unidad
En la unidad, abierto. Ventana> Tienda de activos para acceder a la Tienda de Activos de Unity desde dentro del Editor de Unity. Busque en la Tienda de Activos el complemento Uniduino. Este complemento le permitirá recibir y enviar datos hacia y desde sus pines Arduino dentro de Unity. El complemento en el momento de la escritura cuesta $ 30. Es posible realizar este proyecto sin comprar el complemento, aunque es bastante más complicado y es posible que encuentre el complemento más conveniente durante todo el año..
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 por primera vez. 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. Ponga el Pin D2 en ENTRADA y Digital. Más abajo, coloque el Pin A5 en ANALÓGICO. Su potenciómetro y botón deberían mostrar los 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é debemos controlar? Bueno, las posibilidades son infinitas, pero para hoy crearemos un juego de esquivar muy simple para probar nuestro nuevo sistema de control. Avanzaremos rápidamente en 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: Guía de principiantes En la evolución En el panorama de desarrollo de juegos indie, Unity se ha convertido en un estándar de facto: su bajo costo, su facilidad de uso y su amplio conjunto de características lo hacen ideal para el desarrollo rápido de juegos. Leer más ú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 creado..
Crea una nueva escena y arrastra la prefabilla Uniduino desde Activos> Uniduino> Prefabs en su jerarquía y arrastre la casa prefabricada Uniduino a la jerarquía. Lo necesitamos para hablar entre nuestro juego y el controlador..
En la jerarquía de Unity haz click. 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 obtener la codificación
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 Sharp desde el menú desplegable. Hacer clic Crear y Añadir y el script se agregará al GameObject. Haga doble clic en él para abrir el script e ingrese este código:
utilizando UnityEngine; utilizando System.Collections; utilizando uniduino; public class sphereMover: MonoBehaviour // Los encabezados no son estrictamente necesarios, pero hacen la vida más fácil en el Inspector. [Encabezado ("Variables 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 que estas variables sean públicas significa que podemos cambiarlas en el editor más tarde // 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; // más tarde volveremos a asignar ese potValue a la posición y de nuestra cápsula y lo mantendremos en esta variable public float mappedPot; // public int para nuestro botón pin public int buttonPinNumber; [Encabezado ("Variables de Esfera")] // variables para mantener los valores que anotamos antes para los lados de nuestra pantalla public float leftEdge; public float rightEdge; // Use esto para la inicialización void Start () // e inicializaremos, comenzando con la variable Arduino. // solo estamos usando un arduino, así 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); // Dígale al Arduino que informe cualquier cambio en el valor de nuestro potenciómetro arduino.reportAnalog (5, 1); // configura nuestro 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 utilizado el
Métodos Start y ConfigurePins para inicializar nuestro Arduino en tiempo de ejecución. Guardemos nuestro script y regresemos al editor de Unity para ver 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 más adelante. Sabemos qué pin estamos usando en el Arduino desde nuestra compilación anterior, podemos ingresarlos. También sabemos por nuestro experimento anterior hasta dónde queremos que nuestra esfera pueda viajar hacia la izquierda y hacia la derecha para que no se caiga de la pantalla. Permite 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 script de sphereMover y guardar el script nuevamente..
void Update () // Asignamos el valor que arduino está leyendo de nuestro potentionmeter a nuestra variable potValue potValue = arduino.analogRead (potPinNumber);
Ahora que nuestra variable potValue se actualiza en cada fotograma, podemos ver su valor en tiempo real en el Inspector de la Unidad. Antes de realizar una prueba, 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, ingrese el número de puerto correcto para su Arduino. En este caso fue COM4, aunque puede ser diferente para usted. Comprueba usando el IDE de Arduino si no estás 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 debería comenzar a ver el cambio de la variable Pot Pot en el inspector cuando mueva el potenciómetro..
¡Ahora estamos hablando! Bueno, estrictamente hablando, Unidad y Arduino están hablando, pero ¿quién está contando? Si llegó tan lejos y no está viendo el cambio de valor en el inspector, revise los pasos de configuración y asegúrese de tener el Puerto correcto seleccionado para su Arduino.
Movamos esta esfera
Ahora que hemos actualizado la 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 en el espacio vectorial, determinado por los valores de su posición de transformación. En la imagen de abajo, donde la esfera está en el punto más lejano a la izquierda que queremos, puede ver que el vector de posición es 9.5, -4, 0.
Queremos afectar la posición X de la esfera. Desafortunadamente, el uso directo de los valores de nuestro potenciómetro no funcionará, ya que cuando el potenciómetro está completamente a la izquierda, da un valor de 0, lo que pondría nuestra esfera justo 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áticas.
¿Por qué hacer matemáticas cuando la unidad lo hará por ti??
Para aquellos de ustedes que están temiendo mirar un pedazo de papel cubierto con números sin sentido (aunque hay algunos sitios web excelentes Los 20 sitios web que necesita para aprender matemáticas paso a paso Los 20 sitios web que necesita para aprender matemáticas paso a paso Hemos compilado el los mejores sitios para cada nivel para que pueda aprender de forma sistemática, obtener un mejor conocimiento de las matemáticas de un nivel a la vez y divertirse. Lea más que puede ayudarlo a aprender Matemáticas), no tema. Necesitamos una forma de hacer que nuestros valores de potenciómetro se correspondan con la posición X de nuestra esfera. Por suerte, 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 asignamos los valores que tenemos y los devuelve asignados entre sí, listos para ser utilizados en nuestros esferaMover guión. En la parte superior del panel Proyecto, haga clic en Crear> Script C # y el nombre es ExtensionMethods. Ingrese el siguiente código en el script:
utilizando UnityEngine; utilizando System.Collections; clase estática pública ExtensionMethods // nuestra práctica función Dandy Remapper. from2) + from2;
Guarde el script y regrese a su script de sphereMover. Ahora podemos usar esta función Remap en nuestro script ExtensionMethods en nuestra función Actualizar 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 indicador nos muestra que nuestro Remap toma dos conjuntos de valores Desde y Hasta, y los asigna juntos. Podemos introducir nuestros valores en esto..
mappedPot = potValue.Remap (0, 1023, leftEdge, rightEdge);
Guarda tu guión, vuelve al editor de Unity y pulsa el botón de reproducción. Ahora debería ver que la variable Potencio asignado 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 de ExtensionMethods. No es una calculadora a la vista.
Nota: si se da cuenta de que sus valores están invertidos, de modo que cuando su potenciómetro está completamente a la derecha, está obteniendo un valor negativo para su variable Mapped Pot, es posible que su potenciómetro esté configurado correctamente. Por suerte, puedes arreglar esto sin tener que volver a cablear. Puede simplemente cambiar los valores cuando los reasigne:
Ahora finalmente tenemos valores utilizables. Ahora todo lo que queda por hacer es asignar esos valores a la posición X de nuestra esfera:
// Asigne el valor del potencio asignado a la posición x de la esfera transform.position = new Vector3 (mappedPot, transform.position.y, transform.position.z);
Guarda tu guión, regresa al editor de Unity y presiona 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 manera de frenar un poco las cosas cuando estamos en una situación difícil? Vamos a utilizar nuestro botón para ralentizar el tiempo en nuestro juego. Abra su script de sphereMover y agregue este código a su función de actualización
// 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; else Time.timeScale = 1.0f;
Ahora que tenemos la mecánica de nuestro juego, ¡vamos a añadir algunos obstáculos! Vamos a utilizar al enemigo natural de la esfera, el cubo. En la jerarquía, haga clic en Crear> Objeto 3D> Cubo. En el inspector del cubo., Añadir componente> Física> Cuerpo rígido. Establezca el valor de Arrastre del cuerpo rígido en 5. Además, en el componente Recolector de cajas del inspector, seleccione Es Disparador. Esto nos permitirá detectar colisiones con nuestra Esfera..
Crea un script en el cubo y llámalo. collideWithSphere, abra el script y elimine las funciones de Inicio y Actualización ya que no las necesitaremos esta vez. Introduce este código:
utilizando UnityEngine; utilizando System.Collections; clase pública collideWithSphere: MonoBehaviour void OnTriggerEnter (otro colector) Destroy (other.gameObject);
OnTriggerEnter envía un mensaje cada vez que el colisionador de activación golpea a otro colisionador. En este caso, le estamos diciendo que destruya todo lo que toca. Guarda el script y vuelve 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 prefab 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:
utilizando UnityEngine; utilizando System.Collections; gameManager de clase pública: MonoBehaviour // una variable para mantener la prefab que queremos generar el cubo de GameObject público; // queremos que algunas variables decidan cómo se generan los cubos // y qué tan por encima de nosotros queremos que generen un número público int numberToSpwan; flotador público más bajoParaje frondoso; flotador público más alto // 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 ()
Guarde el script. De vuelta en el editor, seleccione Game Manager en la jerarquía y arrastre su prefab de cubo desde el panel del proyecto hasta 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 se generen lo suficientemente alto como para permitir que se inicie Uniduino; perder el juego antes de poder moverse puede ser frustrante!
El proyecto terminado
Ahora, cuando presionas jugar, los cubos se generan por encima de ti y caen. Puede usar su potenciómetro para evitarlos y su botón para ralentizar el tiempo..
En este proyecto, hemos creado un controlador personalizado con Arduino, Unity y Uniduino configurados para comunicarse con él, y hemos creado 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 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.!
Explorar más sobre: Arduino, controlador de juegos, desarrollo de juegos, programación.