Cómo crear básico Android Juego con la unidad

En un tutorial anterior de Appual titulado “Cómo crear un juego de plataforma básico de Unity” (y su parte 2), repasamos el uso de Unity y el complemento WebGL incorporado para crear un juego de navegador simple basado en HTML5, de esta manera similar. tutorial, repasaremos cómo crear un básico Android juego usando Unity.

Requisitos:

Si aún no lo tiene, debe comenzar descargando e instalando el SDK de Unity y también el Android SDK. Necesitamos el Android SDK para que podamos probar el APK del juego dentro de un Android ambiente.

Inicie Unity y cree un nuevo proyecto. Que sea 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 tu juego mientras estás dentro del editor, y a la derecha tienes el panel Inspector que es donde editarás varias cosas como iluminación, física, etc.

Lo primero que queremos hacer es crear un sprite: este será nuestro personaje principal (que controlaremos). Puede dibujar su propio sprite, como dibujar un cuadrado con ojos, o puede obtener un sprite de Internet, solo asegúrese de que sea un archivo .PNG (fondo transparente).

Arrastra y suelta tu sprite 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; pueden ser cuadrados simples, porque podremos cambiarles el tamaño fácilmente para hacer paredes 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 debemos indicarle a Unity que le dé física a nuestro personaje principal: haga clic en su personaje de sprite principal (debería resaltarse en azul en la ventana Escena), luego en el panel Inspector, busque “GameObjects”.

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

Queremos evitar que el personaje del sprite principal gire fuera de 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 presiona el botón “Reproducir”, su personaje de sprite principal debería caer del cielo y caer sin cesar; nos ocuparemos de eso más adelante, pero tome nota de cómo pudimos aplicar fácilmente la física. La física que aplicamos depende de la forma a la que se aplica, por lo que si aplicara la misma física a una esfera, por examplerodaría.

También queremos corregir nuestra orientación para evitar que el personaje gire y se desplace 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 nuevamente y deberías encontrar que tu jugador ahora cae del cielo a su perdición infinita.

Para evitar que nuestro personaje sprite principal caiga sin cesar, necesitaremos agregar un colisionador. Esto es básicamente solo el contorno sólido de una forma que agregaremos al personaje de sprite principal. 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. Tu personaje sprite principal ahora debería “chocar” con la plataforma y permanecer allí.

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

Esto es especialmente importante si está creando uncorredor basado en 3Dalgo comoPendientedonde necesitas que la cámara permanezca constantemente detrás del objeto principal del juego (tu personaje principal).

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

Entonces, para este tutorial de juego, solo vamos a crear un juego básico tipo corredor sin fin, algo así comoEjecutar 3donde tu personaje principal correrá por la pantalla y esquivará obstáculos (o “se acabará el juego” si golpeas un obstáculo”. Esto requerirá 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 el nombre Scripts. Ahora haga clic derecho en esta nueva carpeta y presione “Crear> C# Script” y asígnele el nombre PlayerControls. Este script va a definir el comportamiento de nuestro personaje sprite principal.

Cuando hace doble clic en este nuevo script, debería abrirse 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” en su interior; básicamente, esta es una secuencia de comandos que debe dejarse sola o simplemente ajustarse a sus necesidades, y nos ahorrará mucho tiempo. Así que vamos a agregar un nuevo objeto.

Encima de la línea void Start():

públicoCuerpo rígido2D 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 indicamos a Unity que ubique la física que adjuntamos a los GameObjects (nuestro personaje sprite principal), y Start () se ejecutará cuando se cree un nuevo objeto o script.

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

rb = GetComponent<Rigidbody2D>();

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

rb.velocity = new 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 el objeto se destruya). Así que 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 usar ‘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 debe moverse continuamente hacia el borde de la plataforma.

Creación de controles de entrada del jugador

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

Vuelva a abrir el script anterior y vamos a agregar este código adicional:

if (Input.GetMouseButtonDown(0))  {

         rb.velocity = new Vector2(rb.velocity.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 haga clic en el botón del mouse (lo que se traducirá como un toque de pantalla en Android), el personaje sprite principal “saltará” en el aire. Esto se debe a que hemos agregado 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 unYdeclaración porqueYes básicamente un tipo de instrucción de “hacer o no hacer” – literalmente diceSI esto sucede, haga este comando. Entonces, si el jugador no está haciendo clic con el mouse (o tocando su Android pantalla) entonces, obviamente, el script no se ejecutará.

Continúe y haga clic en el botón “Reproducir” y asegúrese de que funciona 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 bit de códigoarribael método Actualizar():

public Transform groundCheck;

public Transform startPosition;

public float groundCheckRadius;

public LayerMask whatIsGround;

private bool onGround;

And then add this next line to the Update method above the if statement:

onGround = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, whatIsGround);

And next you will change this following line to include “&& onGround”

if (Input.GetMouseButtonDown(0) && onGround) {

So our entire script should basically look like this:

public class PlayerControls : MonoBehaviour

 {

     public Rigidbody2D rb;

     public Transform groundCheck;

     public Transform startPosition;

     public float groundCheckRadius;

     public LayerMask whatIsGround;

     private bool onGround;




void Start() {

     rb = GetComponent<Rigidbody2D>();

     }




    void Update() {

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

         onGround = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, whatIsGround);       

         if (Input.GetMouseButtonDown(0) && onGround) {

                 rb.velocity = new Vector2(rb.velocity.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 indicamos 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 Ya estás en el aire de un salto, no deberíamos poder volver a saltar. Básicamente, onGround será ciertoyla transformación denominada groundCheck se superpone con la capa de suelo. Esperemos que eso tenga sentido.

Así que guarde la secuencia de comandos y vuelva a Unity, y notará 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 con el botón derecho en la Jerarquía y cree un nuevo objeto vacío, y arrástrelo para que quede 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 “Comprobar terreno” y luego arrástrelo debajo del objeto del juego del jugador como hicimos antes 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 verificará continuamente la distancia del piso.

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”, que sea 0.1.

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

Ahora seleccione “tierra” como la capa para nuestra plataforma y repita esto para cualquier otra plataforma en la ventana del juego. Donde dice “Qué es el suelo” en nuestro objeto sprite de personaje principal, también seleccione la capa de suelo.

Lo que hemos hecho es indicarle al script del jugador que realice una verificación:yel 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 en colisión y menú de juego

Entonces, para resumir todo, las cosas finales que queremos hacer son A: hacer que la colisión con obstáculos resulte en un fin del juego, y B: crear una pantalla de menú de “fin del juego” con un botón de reproducción.

Lo que básicamente quieres hacer es:

  1. Agrega unJugadorobjeto y asignar uncuerpo rígidoy uncolisionadorde su elección a ella.
  2. Añadir unEnemigoobjeto y asignar uncuerpo rígidoy uncolisionadorde su elección a la misma. (y opcional, agregueEtiqueta “enemigo”ja)
  3. Crear un nuevosecuencia de comandos C#y agregarlo como un componente aJugador(o use cualquier script adjunto al reproductor, no es necesario crear uno nuevo si ya tiene uno)
  4. Agrega esto en tu script:
void OnCollisionEnter(Collision coll){

           Debug.Log("Collision"); //Check to see if it even registers a collision, if it works you can remove this line

           if(coll.gameobject.tag == "Enemy"){ //sees if the object your player collided with has a tag called "Enemy", this can be replaced with if(coll.gameobject.name == ... but using a tag is an easy way to do it.

                    //Add your code here, like:

                    Application.LoadLevel("GameOver");

                    Debug.Log("Working");  //if working, you can remove this line.

           }

Juega con eso example script: con un poco de prueba y error, logrará que haga exactamente lo que necesitamos.

Ahora, para ver exactamente cómo crear un “nivel” de GameOver con un botón Reproducir, consulte la última sección de la guía de Appual “Cómo crear un juego básico de plataforma de Unity Pt. 2”.

Leer siguiente

  • Cómo crear un juego básico de plataformas de Unity
  • 4 soluciones básicas de error de Visual Basic ‘Subíndice fuera de rango’
  • Cómo crear un básico Android Aplicación en PhoneGap
  • 3 métodos básicos para crear un Ubuntu USB de arranque

Actualizaciones del boletín

Ingrese su dirección de correo electrónico a continuación para suscribirse a nuestro boletín