Cómo crear un juego básico de Android con Unity

En este tutorial similar, veremos cómo crear un Android juego usando Unity.



Requisitos:

  • Unidad
  • Un buen editor de texto como NotePad ++ (opcional pero recomendado)
  • SDK de Android
Si aún no lo tiene, debe comenzar por descargar e instalar el SDK de Unity y también el SDK de Android. Necesitamos el SDK de Android para poder probar el APK del juego dentro de un entorno Android.

Inicie Unity y cree un nuevo proyecto. Conviértalo en un proyecto 2D.



Hay varios paneles con los que familiarizarse: el panel Jerarquía que contendrá todos los elementos de nuestra escena (escena = cualquier 'nivel' en el que esté trabajando actualmente). Luego está la pestaña Juego que se usa para jugar / probar su juego dentro del editor, y a la derecha tiene el panel Inspector, que es donde editará varias cosas como iluminación, física, etc.



Lo primero que queremos hacer es crear un sprite: este será nuestro personaje principal (que controlamos). Puedes dibujar tu propio objeto, como dibujar un cuadrado con ojos, o puedes tomar un objeto de Internet; solo asegúrate de que sea un archivo .PNG (fondo transparente).



Arrastra y suelta tu objeto en la ventana principal de la escena (la ventana más grande); también aparecerá en el panel Jerarquía a la izquierda.

Así que ahora crearemos algunas plataformas, que pueden ser cuadrados simples, porque podremos cambiar su tamaño fácilmente para hacer muros y otras plataformas.

Así que simplemente cree un nuevo 'sprite' cuadrado y arrástrelo y suéltelo en la ventana Escena como lo hizo con su personaje de sprite.



Ahora necesitamos instruir a Unity para que le dé física a nuestro personaje principal - haga clic en su personaje principal de sprite (debería resaltarse en azul en la ventana de Escena), luego en el panel Inspector, busque 'GameObjects'.

Haga clic en 'Agregar componente> Física 2D> RigidBody2D'. Esto agregará automáticamente la física a su sprite, que de otro modo habría tenido que escribir usted mismo en otro SDK.

Queremos evitar que el personaje principal del sprite gire sin control, así que busque la pestaña Restricciones en el panel Inspector (con el sprite principal aún resaltado en la ventana Escena) y marque la casilla 'Congelar rotación Z'.

Si presionas el botón 'Reproducir', tu personaje de sprite principal debería caer del cielo y caer sin fin; nos ocuparemos de eso más tarde, pero solo toma nota de cómo pudimos aplicar fácilmente la física. La física que aplicamos depende de la forma a la que se estén aplicando, por lo que si aplicaras la misma física a una esfera, por ejemplo, rodaría.

También queremos arreglar nuestra orientación para evitar que el personaje gire y gire libremente. Encuentra 'restricciones' en el inspector con el jugador seleccionado y marca la casilla para congelar la rotación Z. Ahora haz clic en reproducir de nuevo y deberías encontrar que tu jugador ahora cae del cielo a su perdición infinita.

Para evitar que nuestro personaje de sprite principal caiga sin cesar, vamos a necesitar agregar un colisionador. Esto es básicamente el contorno sólido de una forma que agregaremos al personaje principal del objeto. Resalte su personaje de sprite principal, haga clic en 'Agregar componente> Física 2D> BoxCollider2D'.

Ahora haga exactamente lo mismo con la plataforma que creó anteriormente. Su personaje principal de sprite ahora debería 'chocar' con la plataforma y permanecer allí.

Así que ahora queremos asegurarnos de que la cámara seguirá a tu personaje de sprite principal; dentro de la escena, ya debería haber un objeto de cámara. Quieres arrastrar esto encima de el personaje principal de sprite.

Esto es especialmente importante si está creando una Corredor basado en 3D , algo como Pendiente donde necesitas que la cámara permanezca constantemente detrás del objeto principal del juego (tu personaje de sprite principal).

Ahora ve al panel Jerarquía y en la lista de GameObjects, quieres arrastrar la cámara debajo el personaje de sprite principal (Player GameObject). Esto hará que el personaje principal del sprite sea ' padre' de la cámara. Entonces, siempre que el Player GameObject se mueva por la pantalla, la cámara debería seguirlo.

Entonces, para este tutorial del juego, solo vamos a crear un juego básico tipo corredor sin fin, algo así como Ejecutar 3 , donde tu personaje principal correrá por la pantalla y esquivará obstáculos (o 'el juego se terminará' si te topas con un obstáculo '. Esto tomará algunos guiones, la mayoría de los cuales se proporcionarán en esta guía.

Haga clic derecho en la carpeta 'Activos' y cree una nueva carpeta - asígnele un nombre Guiones . Ahora haga clic derecho en esta nueva carpeta y presione 'Crear> Script C #' y asígnele un nombre PlayerControls . Este script va a definir el comportamiento de nuestro personaje sprite principal.

Cuando hace doble clic en este nuevo script, debería abrir en Visual Studio; alternativamente (y mi preferencia personal), puede editarlo en algo como NotePad ++.

El archivo de secuencia de comandos ya debería tener un poco de código de 'placa de caldera' dentro de él; básicamente, se trata de una secuencia de comandos que debe dejarse sola o simplemente ajustarse a sus necesidades, y nos ahorrará mucho tiempo. Entonces vamos a agregar un nuevo objeto.

Por encima de la línea void Start ():

público Rigidbody2D rb;

El siguiente fragmento de código que necesitamos agregar irá dentro de Start (), y se usa para encontrar el cuerpo rígido; básicamente, le estamos indicando a Unity que ubique la física que adjuntamos a los GameObjects (nuestro personaje principal de sprite), y Start () se ejecutará cuando se cree un nuevo objeto o script.

Entonces, a continuación, ubique el objeto físico.

rb = GetComponent< Cuerpo rígido2D >();

Y agregará esta línea dentro de Update ()

rb.velocity = nuevo Vector2 (3, rb.velocity.y);

Lo que hace Update () es actualizar constantemente, por lo que cualquier código agregado allí se ejecutará continuamente (a menos que se destruya el objeto). Entonces, lo que hemos hecho es indicarle al script que queremos que el cuerpo rígido tenga un nuevo vector usando la misma velocidad en el eje Y (rb.velocity.y), pero con una velocidad de 3 en el eje horizontal. En el futuro, también puede utilizar ' FixedUpdate () ' que es similar pero diferente, porque allí puede controlar la cantidad de actualización / actualización del script.

Guarde el script y vuelva a Unity, luego haga clic en su personaje de sprite principal para resaltarlo. En el panel Inspector, vaya a Agregar componente> Scripts y agregue el script que acabamos de guardar. Ahora, cuando haces clic en el botón Reproducir, el personaje principal del objeto debe moverse continuamente hacia el borde de la plataforma.

Creación de controles de entrada del reproductor

Entonces, debido a que este es un juego de corredor sin fin con obstáculos, necesitamos agregar controles para el jugador, como un botón de 'salto'.

Vuelva a abrir el script de antes y agregaremos este código adicional:

 Si (Input.GetMouseButtonDown (0)) {rb.velocity = nuevo Vector2 (velocidad rb.x, 5); }

Vas a poner eso dentro del método Update (), y lo que básicamente hace es decirle a Unity que cuando el jugador hace clic en el botón del mouse (que se traducirá como un toque de pantalla en Android), el personaje principal del sprite 'saltará ' en el aire. Esto se debe a que agregamos una velocidad en el eje Y con un valor de 5 (un valor más alto significaría un salto más alto, por supuesto).

Si no está muy familiarizado con la codificación, usamos un Si declaración porque Si es básicamente un tipo de instrucción 'haz o no', literalmente dice SI esto sucede, haga este comando . Entonces, si el jugador no está haciendo clic con el mouse (o tocando su pantalla de Android), obviamente el script no se ejecutará.

Continúe y haga clic en el botón 'Reproducir' y asegúrese de que funcione correctamente antes de continuar.

A continuación, agregaremos nuestros obstáculos (que pueden 'destruir' el sprite del personaje principal), una puntuación del juego y un menú de 'fin del juego'.

Si probaste el juego hasta ahora, el único problema que tenemos hasta ahora es que al presionar el botón 'saltar' que creamos, el personaje saltará sin importar si está conectado a tierra o no; esto es básicamente Flappy Birds, y no un corredor como queremos. Pero vamos a arreglar eso.

En el script, agregue este fragmento de código encima el método Update ():

 público Transformar groundCheck; público Transform startPosition; público   flotador groundCheckRadius; público LayerMask whatIsGround; privado   bool en el suelo; Y luego agregue esta siguiente línea al método de actualización sobre el Si declaración: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); Y a continuación, cambiará esta línea siguiente para incluir '&& onGround' Si (Input.GetMouseButtonDown (0) && onGround) {Entonces, todo nuestro script debería verse básicamente así: público   clase   PlayerControls : MonoBehaviour { público Rigidbody2D rb; público Transformar groundCheck; público Transform startPosition; público   flotador groundCheckRadius; público LayerMask whatIsGround; privado   bool en el suelo; vacío   comienzo () {rb = GetComponent (); } vacío   Actualizar () {rb.velocity = nuevo Vector2 (3, rb.velocity.y); onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); Si (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = nuevo Vector2 (velocidad rb.x, 5); }}}

Para explicar lo que hemos hecho, hemos creado una nueva 'transformación', que significa una posición en el espacio del mundo del juego. Hemos establecido su radio y le estamos indicando a Unity que verifique si el radio se superpone con nuestra capa de 'suelo', por lo que si nuestro radio está sincronizado con el 'suelo', nuestro personaje debería poder saltar, y si nosotros Ya estamos en el aire de un salto, no deberíamos poder volver a saltar. Básicamente, en el suelo será verdad Si la transformación llamada GroundCheck se superpone con la capa de suelo. Ojalá tenga sentido.

Así que guarda el guión y vuelve a Unity, y notarás que se han agregado más opciones al Inspector después de resaltar el jugador. Estas son variables públicas y podemos ajustarlas a nuestro gusto.

Ahora haga clic derecho en la Jerarquía y cree un nuevo objeto vacío, y arrástrelo para que esté debajo del sprite del personaje principal en la ventana principal de Escena; coloque este objeto vacío donde queremos que se detecte el piso. Cambie el nombre del objeto a 'Check Ground' y luego arrástrelo debajo del objeto de juego del jugador como hicimos anteriormente con la cámara (para crear una relación padre-hijo entre los objetos). Ahora el objeto vacío seguirá al sprite del personaje principal, al igual que la cámara, y comprobará continuamente la distancia del suelo.

Ahora seleccione el sprite del personaje principal y vaya al panel Inspector - arrastre el objeto Check Ground al espacio llamado 'groundCheck'. La posición de 'transformación' debe ser igual a la posición de este nuevo objeto, y donde dice 'Radio', hazlo 0.1.

Necesitamos definir la capa de suelo. Simplemente seleccione el terreno y, en el Inspector, busque el botón 'Capa: Predeterminado' (es un cuadro desplegable) y elija 'Agregar capa'.

Ahora seleccione 'suelo' como la capa para nuestra plataforma y repita esto para cualquier otra plataforma en la ventana del juego. Donde dice 'What is Ground' en nuestro objeto sprite de personaje principal, también seleccione la capa de suelo.

Lo que hemos hecho es indicarle al script del reproductor que realice una comprobación: Si el pequeño punto en la pantalla se superpone con cualquier cosa que coincida con la capa, el personaje saltará solo si esto es cierto.

Game Over on Collision y menú de juego

Entonces, para terminar, las últimas cosas que queremos hacer son A: Hacer que chocar con obstáculos resulte en un juego terminado, y B: Crear una pantalla de menú de 'juego terminado' con un botón de volver a jugar.

Lo que básicamente quieres hacer es:

  1. Agrega un Jugador objeto y asignar un cuerpo rígido y un colisionador de su elección.
  2. Agregar un Enemigo objeto y asignar un cuerpo rígido y un colisionador de su elección. (y opcional, agregue Etiqueta 'enemigo' lo)
  3. Crear un nuevo Secuencia de comandos de C # y agregarlo como un componente a Jugador (o use cualquier script adjunto al reproductor, no es necesario crear uno nuevo si ya tiene uno)
  4. Agregue esto en su secuencia de comandos:
vacío OnCollisionEnter ( Colisión cuello) { Depurar . Iniciar sesión ('Colisión'); // Comprueba si incluso registra una colisión, si funciona puedes eliminar esta línea si (coll.gameobject. etiqueta == 'Enemigo') { // ve si el objeto con el que chocó tu jugador tiene una etiqueta llamada 'Enemigo