Crea un juego de tiros libres de baloncesto con Unity

Lo que vas a crear

Introducción

En este tutorial, aprenderá cómo crear un juego 3D móvil con C # y Unity. El objetivo del juego es anotar tantos puntos como sea posible. Aprenderás los siguientes aspectos del desarrollo de juegos de Unity:

  • Configurando un proyecto 3D en Unity
  • Implementando controles de tap
  • Física integradora
  • Creando Prefabs

1. Crea un nuevo proyecto de unidad

Abre Unity y selecciona Nuevo proyecto desde el Expediente Menú para abrir el nuevo cuadro de diálogo del proyecto. Indica a Unity dónde quieres guardar el proyecto y configuraConfigurar valores predeterminados para: menú para 3D.


2. Crear configuraciones

En el siguiente paso, se presenta la interfaz de usuario de Unity. Configure el proyecto para el desarrollo móvil seleccionando Configuraciones de compilación desde el Expediente Menú y seleccione su plataforma preferida. He elegido Android para este tutorial.


3. Dispositivos

Lo primero que debemos hacer después de seleccionar la plataforma a la que nos dirigimos es elegir el tamaño de las ilustraciones que usaremos en el juego. He enumerado los dispositivos más importantes para cada plataforma a continuación e incluí la resolución de pantalla y la densidad de píxeles del dispositivo.

iOS

  • iPad: 1024px x 768px
  • Retina iPad: 2048px x 1536px
  • 3.5 "iPhone / iPod Touch: 320px x 480px
  • Retina de iPhone / iPod de 3.5 ": 960px x 640px
  • 4 "iPhone / iPod Touch: 1136px x 640px

Androide

Debido a que Android es una plataforma abierta, hay muchos dispositivos diferentes, resoluciones de pantalla y densidades de píxeles. Algunos de los más comunes se enumeran a continuación.

  • Asus Nexus 7 Tablet: 800px x 1280px, 216ppi
  • Motorola Droid X: 854px x 480px, 228ppi
  • Samsung Galaxy s3: 720px x 1280px, 306ppi

Telefono windows

  • Nokia Lumia 520: 400px x 800px, 233ppi
  • Nokia Lumia 1520: 1080px x 1920px, 367ppi

Mora

  • Blackberry z10: 720px x 1280px, 355ppi

Recuerde que el código utilizado para este tutorial puede usarse para apuntar a cualquiera de las plataformas anteriores.

4. Exportar Gráficos

Dependiendo de los dispositivos a los que te dirijas, es posible que tengas que convertir las ilustraciones del juego al tamaño y resolución recomendados. Puedes hacer esto en tu editor de imágenes favorito. He usado el Ajustar el tamaño ... función bajo el Herramientas menú en OS X's Avance solicitud.


5. Interfaz de usuario de Unity

Antes de comenzar, asegúrese de hacer clic en el 3D botón en el Escena panel. También puede modificar la resolución que se muestra en el Juego panel.


6. Interfaz de juego

La interfaz de nuestro juego será sencilla. La captura de pantalla anterior te da una idea de la obra de arte que usaremos y cómo se verá la interfaz del juego. Puede encontrar la ilustración y los recursos adicionales en los archivos de origen de este tutorial..


7. Lenguaje de programación

Puedes usar uno de los tres lenguajes de programación cuando usas Unity, DO#, UnityScript, una variación de JavaScript, y Abucheo. Cada lenguaje de programación tiene sus pros y sus contras, y depende de usted decidir cuál prefiere. Mi preferencia personal va al lenguaje de programación C #, por lo que es el lenguaje que usaré en este tutorial..

Si decide utilizar otro lenguaje de programación, asegúrese de consultar la Referencia de guiones de Unity para ver ejemplos..


8. efectos de sonido

Usaré una serie de sonidos para mejorar la experiencia auditiva del juego. Los efectos de sonido utilizados en este tutorial se obtuvieron de as3sfxr y Soungle.


9. Modelos 3D

Para crear nuestro juego, primero necesitamos obtener nuestros modelos 3D. Recomiendo 3Docean para modelos de alta calidad, texturas y más, pero si está probando o aún aprendiendo, los modelos gratuitos pueden ser un buen lugar para comenzar.

Los modelos de este tutorial se descargaron de SketchUp 3D Warehouse, donde puede encontrar una gran variedad de modelos de todo tipo..

Dado que Unity no reconoce el formato de archivo SketchUp, debemos convertir los archivos de SketchUp a un formato de archivo que Unity pueda importar. Comience descargando la versión gratuita de SketchUp, SketchUp Make.

Abre tu modelo 3D en SketchUp Make and go select Exportar> Modelo 3D desde el Expediente menú y elegir Collada (* .dae) de la lista de opciones.

Elija un nombre, seleccione un directorio y haga clic en Exportar. Se creará un archivo y una carpeta para el modelo 3D. El archivo contiene los datos del objeto 3D y la carpeta de texturas utilizadas por el modelo. Ahora puede importar el modelo a Unity como se explica en el siguiente paso.


10. Importar activos

Antes de comenzar la codificación, debemos agregar nuestros activos al proyecto de Unity. Puedes hacer esto de varias maneras:

  • Seleccionar Importar nuevo activo desde el Bienes menú.
  • Agregue los elementos a la carpeta de activos de su proyecto..
  • Arrastra y suelta los activos en la ventana del proyecto..

Después de completar este paso, debería ver los activos en el proyecto de su proyecto. Bienes carpeta en el Proyecto panel.


11. Crear escena

Estamos listos para crear la escena de nuestro juego arrastrando objetos a la JerarquíaEscena panel.


12. Fondo 2D

Comience arrastrando y soltando el fondo en el Jerarquía panel. Debería aparecer automáticamente en el Escena panel. Ajustar el Transformar valores en el Inspector como se muestra en la siguiente captura de pantalla.


13. aro

El objetivo del juego es lanzar la pelota a través del aro. Arrástrelo desde el Bienes panel para el Escena y cambiar su Transformar propiedades como se muestra en la siguiente captura de pantalla.


14. luz

Como habrás notado, el aro de baloncesto es un poco demasiado oscuro. Para arreglar esto, necesitamos agregar un Ligero a nuestra escena Ir GameObject> Crear otro y seleccione Luz direccional. Esto creará un objeto que producirá un haz de luz. Cambiar su Transformar valores como se muestra en la siguiente captura de pantalla para que ilumine el aro de baloncesto.


15. Colisionador de aro

Con el aro de baloncesto debidamente iluminado, es hora de agregar un colisionador para que la pelota no se mueva cuando toca el área blanca..

Haga clic en el Agregar componente botón en el Inspector panel, seleccione Física> Box Collider, y cambia sus valores como se muestra en la siguiente captura de pantalla.

Verás un borde verde alrededor del aro de baloncesto en el Escena panel que representa el colisionador de cuadro que acabamos de añadir.


16. Material de la física de rebote

Si lanzáramos una pelota al aro de baloncesto, el colisionador de cajas lo detendría, pero se detendría sin rebotar, como cabría esperar en el mundo real. Para remediar esto necesitamos un Material de fisica.

Después de seleccionar Crear> Material de física desde el Bienes menú,deberías verlo aparecer en el Bienes panel. Cambié el nombre a BounceMaterial.

Cambia sus propiedades en el Inspector panel para que coincida con los de esta captura de pantalla de abajo.

A continuación, seleccione el colector de casillas del aro de baloncesto y haga clic en el pequeño punto a la derecha de Material texto, aparecerá una ventana donde puede seleccionar la material de fisica.


17. Basket Collider

Usaremos otro colisionador para detectar cuándo la pelota pasa por el aro. Este debe ser un colisionador disparador para asegurarse de que detecta la colisión sin interactuar con el cuerpo de física.

Cree un nuevo colisionador para el aro como se muestra en el paso 15 y actualice sus valores como se muestra en la siguiente captura de pantalla.

Esto colocará el colisionador debajo del anillo donde la bola no puede volver hacia arriba, lo que significa que se ha hecho una canasta. Asegúrese de revisar el Es gatillo casilla de verificación para marcarlo como un colisionador de disparo.


18. Anillo de malla de colisionador

Es hora de agregar un colisionador al propio anillo. Debido a que necesitamos que la pelota pase a través del centro del anillo, no podemos tener un colisionador de esfera o caja, en lugar de eso usaremos un Colisionador de malla.

UNA Colisionador de malla nos permite utilizar la forma del objeto 3D como colisionador. Como indica la documentación, Mesh Collider construye su representación de colisión a partir de la malla unida a GameObject.

Seleccione el aro de la Jerarquía panel, haga clic en el triángulo a su izquierda para expandir su jerarquía, expanda grupo_17, y seleccione el elemento nombrado anillo.

Agregue un colisionador como vimos en el paso 15, pero asegúrese de seleccionar Colisionador de malla. Unity detectará automáticamente la forma del modelo y creará un colisionador para él..


19. sonido de aro

Para reproducir un sonido cuando la pelota golpea el aro, primero debemos adjuntarlo. Selecciónelo de la Jerarquía o Escena ver, haga clic en el Agregar componente botón en el Inspector panel, y seleccione Fuente de audio en el Audio sección.

Desmarcar Jugar en Awake y haga clic en el pequeño punto a la derecha, debajo del icono del engranaje, para seleccionar el sonido que desea reproducir.


20. bola

Centrémonos ahora en el baloncesto. Arrástrelo desde el Bienes Carpeta y colóquela en la escena. No te preocupes por la posición de la pelota por ahora, porque la convertiremos en una Casa prefabricada luego.

Para que la bola sea detectada cuando golpea el aro, necesitamos agregar un componente, un Colisionador de esfera para ser preciso. Selecciona la bola en la escena, abre el Inspector panel, y haga clic en Agregar componente. De la lista de componentes, seleccione Colisionador de esfera desde el Física sección y actualizar sus propiedades como se muestra a continuación.


21. Bola RigidBody

Para detectar una colisión con el balón de baloncesto, al menos uno de los objetos en colisión debe tener una Cuerpo rígido componente adjunto a él. Para agregar uno a la pelota, seleccione Agregar componente en el Inspector panel, y elija Física > Cuerpo rígido.

Deje los ajustes en sus valores predeterminados y arrastre la bola desde el Jerarquía panel para el Bienes panel para convertirlo en un Casa prefabricada.


22. Aro Sprite

Para representar las canastas ya hechas por el jugador, usamos una versión 2D del aro de baloncesto. Arrástrelo desde el panel Activos y colóquelo en la escena como se muestra a continuación..


23. Puntuación de texto

Debajo del aro 2D, mostramos el número de canastas que el jugador ha anotado hasta ahora. Seleccionar GameObject> Crear otro> Texto GUI para crear un objeto de texto, colóquelo en la parte inferior del aro de baloncesto y cambie el texto en la Jerarquía panel para 0.

Puede incrustar una fuente personalizada importándola en el Bienes carpeta y cambiando el Fuente propiedad del texto en el Inspector.

24. Medidor de fuerza

El medidor de fuerza es una barra que mostrará la fuerza utilizada para disparar la bola. Esto agregará otro nivel de dificultad al juego. Arrastra los sprites para el medidor de fuerza desde el Bienes panel para el Escena y posicionarlos como se muestra en la captura de pantalla de abajo.


25. Bola Sprite

También agregamos un indicador a la interfaz que muestra cuántos disparos le quedan al jugador. Para completar este paso, siga los mismos pasos que usamos para mostrar la puntuación actual del jugador.


26. Canasta de comandos

Por fin es hora de escribir algo de código. El primer script que crearemos es el Cesta Script que verifica si la pelota pasa por el anillo o golpea el tablero.

Seleccione el aro y haga clic en el Agregar componente botón en el Inspector panel. Seleccionar Nueva secuencia de comandos y nombrarlo Cesta. No te olvides de cambiar el idioma a C #. Abra el archivo recién creado y agregue el siguiente fragmento de código.

utilizando UnityEngine; utilizando System.Collections; cesta pública de clase: MonoBehaviour puntuación de GameObject pública; // referencia al objeto de juego ScoreText, establecido en el editor público AudioClip basket; // referencia al sonido de la cesta void OnCollisionEnter () // si la bola golpea el tablero audio.Play (); // reproduce el sonido de la tabla de golpes void OnTriggerEnter () // si la bola golpea al colisionador de la cesta int currentScore = int.Parse (score.GetComponent (). text) + 1; // agrega 1 a la puntuación. GetComponent (). text = currentScore.ToString (); AudioSource.PlayClipAtPoint (basket, transform.position); // reproducir el sonido de la canasta 

En este script, establecemos dos variables públicas que representan objetos en el Escena y en el Bienes carpeta. Vuelva al editor y haga clic en el pequeño punto a la derecha de las variables para seleccionar los valores descritos en los comentarios..

Tocamos un sonido cuando la pelota golpea el aro de baloncesto y verificamos si la pelota pasa a través del anillo. los Analizar gramaticalmente método convertirá el texto de la Texto GUI el objeto del juego a un número para que podamos incrementar la puntuación y luego configurarlo de nuevo como texto usando Encadenar. Al final, jugamos al cesta sonar.

27. disparar guión

los Disparar La clase maneja el resto de la interacción del juego. Dividiremos el contenido del script para facilitar su digestión..

Comience seleccionando Cámara y haga clic en el Agregar componente botón en el Inspector panel. Seleccionar Nueva secuencia de comandos y nombrarlo Disparar.

28. Variables

En el siguiente fragmento de código, he enumerado las variables que usaremos. Lea los comentarios en el fragmento de código para aclarar..

utilizando UnityEngine; utilizando System.Collections; Clase pública Shoot: MonoBehaviour bola pública de GameObject; // referencia a la bola prefabricada, establecida en el editor privado Vector3 throwSpeed ​​= new Vector3 (0, 26, 40); // Este valor es una cesta segura, la modificaremos utilizando el indicador público Vector3 ballPos; // posición inicial de la bola lanzada privada bool = falso; // si la bola ha sido lanzada, previene 2 o más bolas privadas GameObject ballClone; // no usamos el prefijo público original GameObject availableShotsGO; // ScoreText referencia de objeto del juego private int availableShots = 5; medidor de GameObject público; // referencias al medidor de fuerza public GameObject arrow; Flotador privado arrowSpeed ​​= 0.3f; // Dificultad, mayor valor = movimiento de flecha más rápido private bool right = true; // usado para revertir el movimiento de flechas public GameObject gameOver; // juego sobre texto 

29. Aumentar la gravedad

A continuación, creamos la comienzo Método en el que configuramos la fuerza de gravedad para -20 hacer que la bola caiga más rápido.

void Start () / * Increase Gravity * / Physics.gravity = new Vector3 (0, -20, 0);  

30. Comportamiento del medidor de fuerza

Para manejar las interacciones con el motor de física, implementamos el FixedUpdate método. La diferencia entre este método y el regular. Actualizar el metodo es que FixedUpdate se ejecuta en función de los pasos de la física en lugar de cada fotograma, lo que podría causar problemas si el dispositivo es lento debido a la falta de memoria, por ejemplo.

En el FixedUpdate Método, movemos la flecha del medidor de fuerza usando el Correcto Variable para detectar cuándo invertir el movimiento de la flecha..

 void FixedUpdate () / * Move Meter Arrow * / if (arrow.transform.position.x < 4.7f && right)  arrow.transform.position += new Vector3(arrowSpeed, 0, 0);  if (arrow.transform.position.x >= 4.7f) derecho = falso;  if (right == false) arrow.transform.position - = new Vector3 (arrowSpeed, 0, 0);  if (arrow.transform.position.x <= -4.7f)  right = true; 

31. disparar pelota

El baloncesto se lanza cuando el jugador toca la pantalla. Cuando se toca la pantalla, primero verificamos si ya hay una bola en el aire y si el jugador tiene disparos disponibles. Si se cumplen estos requisitos, actualizamos los valores, creamos una nueva instancia de la pelota y la lanzamos usando el addForce método.

/ * Dispara la bola en Tap * / if (Input.GetButton ("Fire1") &&! Thrown && availableShots> 0) thrown = true; Shots disponibles--; availableShotsGO.GetComponent (). text = availableShots.ToString (); ballClone = Instancia (ball, ballPos, transform.rotation) como GameObject; throwSpeed.y = throwSpeed.y + arrow.transform.position.x; throwSpeed.z = throwSpeed.z + arrow.transform.position.x; ballClone.rigidbody.AddForce (throwSpeed, ForceMode.Impulse); audio.Jugar (); // reproducir el sonido disparar

32. Quitar la bola

En el siguiente bloque de código, probamos si la pelota llega al piso y la retiramos cuando lo hace. También nos preparamos para el siguiente lanzamiento reajustando las variables..

/ * Eliminar bola cuando golpea el piso * / if (ballClone! = Null && ballClone.transform.position.y < -16)  Destroy(ballClone); thrown = false; throwSpeed = new Vector3(0, 26, 40);//Reset perfect shot variable 

33. Revisar las fotos disponibles

Después de sacar la pelota, verificamos que al jugador le quedan tiros. Si este no es el caso, entonces terminamos el juego y llamamos. reiniciar.

/ * Marque si está fuera de tiro * / if (availableShots == 0) arrow.renderer.enabled = false; Instantiate (gameOver, nuevo Vector3 (0.31f, 0.2f, 0), transform.rotation); Invocar ("reiniciar", 2); 

34. reiniciar

los reiniciar el método se ejecuta dos segundos después de que el jugador se queda sin disparos, reiniciando el juego invocando Nivel de carga.

 void restart () Application.LoadLevel (Application.loadedLevel); 

35. Pruebas

Es hora de probar el juego. prensa Comando-P para jugar el juego en la unidad. Si todo funciona como se espera, entonces estás listo para los pasos finales.


36. Configuración del jugador

Cuando estés satisfecho con tu juego, es hora de seleccionar Configuraciones de compilación desde el Expediente menú y haga clic en el Ajustes del jugador botón. Esto debería mostrar el Ajustes del jugador en el Inspector Panel donde puede configurar los parámetros para su aplicación..

La configuración es aplicación e incluye el creador o la compañía, la resolución de la aplicación y el modo de visualización, el modo de representación, la compatibilidad del dispositivo, etc. La configuración variará según la plataforma y los dispositivos a los que se dirige la aplicación y también cumple los requisitos de la tienda que está publicando en mente.


37. Iconos e imágenes de bienvenida.

Al usar la obra de arte que creaste anteriormente, ahora puedes crear un bonito icono y una imagen de bienvenida para tu juego. Unity le muestra los tamaños requeridos, que dependen de la plataforma para la que está construyendo..

38. Construye y juega


Una vez que su proyecto esté correctamente configurado, es hora de volver a visitar el Configuraciones de compilación y haga clic en el Construir Botón. Eso es todo lo que se necesita para construir tu juego para prueba y / o distribución.

Conclusión

En este tutorial, hemos aprendido sobre modelos 3D, colisionadores de malla, materiales de física, detección de colisiones y otros aspectos del desarrollo de juegos de Unity. Te animo a experimentar con el resultado y personalizar el juego para que sea tuyo. Espero que te haya gustado este tutorial y te haya resultado útil..