Tabla de contenidos

Introducción

Imagine esto, sólo ha conseguido un rompecabezas para la Navidad. No se lee la escritura en la caja y se deshacen de un lado a medida que comienza a construir esta obra maestra. El orgullo de su auto en el hecho de que casi ha terminado y sólo se tarda unos 40 minutos. Tiene hasta tener una mejor visión de su puzzle completo sólo para descubrir que no se cumpla! ¿Cómo sabes esto? Debido a que es un rompecabezas de tres piezas, pero sólo tiene dos piezas. Es necesario encontrar la tercera pieza.

En este tutorial, que es lo que estamos haciendo, encontrar la última pieza de un rompecabezas de tres partes. Más concretamente, vamos a hacer nuestro juego compatible con móviles y optimización como tal. Vamos a añadir una especie de sistema de puntuación, y también vamos a tener una sección adicional sobre cómo hacer cristales rotos. Vamos a empezar!
No se pierda! extremos de la oferta en

  • Accede a los más de 200 cursos
  • Nuevos cursos añadió mensual
  • Cancelar en cualquier momento
  • Los certificados de terminación

    ACCESO ahora

    Salida los otros tutoriales de esta serie!

    Esta es la parte final de una serie de tutoriales de tres partes sobre Juego Dev Academia. Echa un vistazo a los otros tutoriales aquí:

    Parte 1

    Parte 2

    Ya que vamos a ser la construcción de un juego para móviles, necesitamos un poco de hardware, es decir, un dispositivo móvil; más específicamente, un dispositivo que se puede construir a partir de la unidad directamente. Esto se debe a que vamos a estar haciendo un montón de pruebas, pruebas de cosas que sólo se pueden ejecutar en un dispositivo móvil. Si usted no tiene un dispositivo que se puede construir de forma directa, puedo sugerir que usted consigue uno. Son realmente muy barato. Sólo tiene que utilizar una tableta del fuego Amazon, que es alrededor de $ 50 (por lo general menos cuando se puede conseguir que la venta). En serio, es un muy activo útil. Por lo tanto, apoderarse de su “acumulación de” favorito dispositivo y vamos a empezar a construir!

    Guardar el! Ejecutable

    En este punto, si te gusta el juego de la forma en que actualmente es, lo construye en el escritorio como un archivo ejecutable. Vamos a estar cambiando muchas cosas diferentes que van a hacer que este juego no se puede reproducir en un ordenador de escritorio. Si desea, se puede hacer una copia de la carpeta del proyecto. De esta manera siempre tendría una versión de escritorio de copia de seguridad. Tu decides. Una vez que haya terminado, decir adiós a todas las partes relacionadas con el escritorio de su juego a medida que empezamos a convertir esto en móvil.

    Conversión a móvil

    La construcción en el estado actual

    Vamos a seguir adelante y construir a nuestro dispositivo para ver lo que realmente hay que hacer. Estoy utilizando la plataforma Android así que voy a seguir adelante y el interruptor de la plataforma.

    Ventana de construir la unidad

    Esto tomó un tiempo muy largo, probablemente a causa de la escena de muestra que tiene una gran cantidad de shaders complejos.


    Ahora, necesitamos “Añadir escenas abiertas” a las “Escenas de construir”, desactive la escena de muestra ya que no estamos utilizando y sólo se va a utilizar el espacio en nuestro dispositivo.


    Para Android, que tenía que suministrar un identificador del paquete antes de que pudiera construirlo, seguir adelante y hacer esto si no lo ha hecho.


    ¡Muy bien! Con su dispositivo conectado y es reconocido, vamos a golpear generar y ejecutar a ver lo que parece.

    dedo tocando la pared azul en la pantalla de la tableta

    De buenas a primeras, parece estar funcionando bien. Podemos generar bolas en contacto e interactuar con nuestra interfaz de usuario. Pero cuando tratamos de utilizar más de un dedo para las bolas de regeneración, es decir desovar dos bolas tocando con dos dedos, sólo uno de desoves entre nuestras dos dedos.

    Dos dedos en movimiento tableta para romper el vidrio en el juego

    Además, el dispositivo estaba sufriendo de una gran cantidad de retardo, esto puede no ser el caso con los de pero creo que vale la pena abordar. Vamos a empezar por la fijación de los problemas de rendimiento.

    La fijación de los problemas de rendimiento

    La razón por la que estamos haciendo esto primero es que hace más fácil para solucionar el problema bolas de desove, cuando no tenemos ningún tipo de retraso. En cuanto a rendimiento, hay algunas cosas que podemos hacer: en primer lugar, y más eficaz, estaba teniendo un colisionador que elimina cualquier vidrio que sale de la visión de la cámara. Pensamos, que no podemos ver, pero los fragmentos Unidad sigue haciendo cálculos cuerpo rígido. Esto es extremadamente exigente así que vamos a arreglar esto. Haga clic en su cámara principal y crear un cubo que es lo suficientemente grande como para cubrir toda la tierra.


    A continuación, desactiva la malla Procesador y establecer el Colisionador de gatillo. A continuación, tenemos que crear un nuevo guión en este objeto llamado “CullObjectManager”.


    Este es el código para la secuencia de comandos:
    utilizando System.Collections; usando System.Collections.Generic; usando UnityEngine; CullObjectManager clase pública: MonoBehaviour {// Usar esto para la inicialización de inicio void () {} // actualización se llama una vez por cuadro de actualización de vacío () {} privada OnTriggerEnter vacío (Colisionador de otra) {if (other.tag = «Sin etiqueta»!) {Destruir (other.gameObject); }}} 12345678910111213141516171819202122usingSystem.Collections; usingSystem.Collections.Generic; usingUnityEngine; publicclassCullObjectManager: MonoBehaviour {// Usar esto para initializationvoidStart () {} // actualización se llama una vez por framevoidUpdate () {} privatevoidOnTriggerEnter (Colisionador de otra) {if (otra ! .tag = «Sin etiqueta») {Destruir (other.gameObject);}}}

    Esto eliminará todo a excepción de nuestros planos de tierra que tienen una etiqueta llamada “Sin etiqueta”. Si ejecuta este en su dispositivo debería ver una mejora notable de la velocidad de fotogramas. En este punto, debemos tener algunas circunstancias factibles. Todavía se puede quedando un poco (como lo fue con mi dispositivo) así que hice algunas otras cosas. En primer lugar, fui a los ajustes de Calidad (Editar -> Ajustes del proyecto -> Calidad)


    y cambiar los parámetros, a lo siguiente:


    Luego fue a la ventana de iluminación y discapacitados “Auto Generar” y al mismo tiempo se hace clic en “Generar Iluminación”.


    Cuando construí esto a mi dispositivo de E notó una ligera mejora. Si todavía se está quedando (especialmente cuando el colisiona con la bola de cristal) hay una última cosa que podemos hacer lo que vamos a llegar a en una sección posterior. Por ahora, creo que tenemos una alta frecuencia de imagen suficiente para crear una mejor forma de bolas de regeneración.

    fijación de la cuestión desove

    Al fijar este problema, tenemos que entender la diferencia entre MousePosition (lo que estamos utilizando actualmente) y TouchPosition (lo que vamos a usar). MousePosition hace regresar la posición de su dedo, pero sólo si se está utilizando uno. Si usa más de un devuelve la posición media. TouchPosition por el contrario, no sólo realiza un seguimiento de la posición de cada dedo, sino también cuántos dedos están actualmente en la pantalla. Con este conocimiento, vamos a ir a nuestro script CameraCharacter (el guión donde desovan las bolas) y el cambio a aplicar TouchPosition. En el guión, eliminar esta declaración lógica:
    si (Input.GetMouseButtonDown (0) && camMoving) {GameObject ballRigid; ballRigid = Instantiate (balón, BallInstantiatePoint, transform.rotation) como GameObject; . BallRigid.GetComponent () AddForce (Vector3.forward * ballForce); } 123456if (Input.GetMouseButtonDown (0) && camMoving) {GameObject ballRigid; ballRigid = Instantiate (balón, BallInstantiatePoint, transform.rotation) asGameObject; ballRigid.GetComponent () AddForce (Vector3.forward * ballForce);.} < p> en este punto, vamos a seguir adelante y crear un número entero estática denominada “BallCount” con el conjunto predeterminado de 15.
    public static int ballCount = 15; 1publicstaticintballCount = 15;

    Ahora, vamos a implementar TouchPosition. En primer lugar, hay que asegurarse de que el jugador está tocando realmente la pantalla mediante la sustitución de la declaración de la lógica de edad con esto:
    // comprueba si el jugador está tocando la pantalla y la cámara está movingif (Input.touchCount> 0 && camMoving) {} // 1234 comprueba si el jugador está tocando la pantalla y la cámara está movingif (Input.touchCount> 0 && camMoving) { }

    a continuación, tenemos que asegurarnos de que no se han disparado todas las pelotas.
    si (Input.touchCount> 0 && camMoving) {if (ballCount! = 0) {}} 123456if (Input.touchCount> 0 && camMoving) {if (ballCount! = 0) {}}

    En tercer lugar, tenemos que recorrer cada toque y agarrar su posición. Entonces tenemos que generar una bola en esa posición.
    si (Input.touchCount> 0 && camMoving) {if (! ballCount = 0) {for (int i = 0; i <2; i ++) {float mousePosx = Input.GetTouch (i) .position.x; flotar mousePosy = Input.GetTouch (i) .position.y; si (Input.GetTouch (i) .phase == TouchPhase.Began) {GameObject ballRigid; Vector3 BallInstantiatePoint = _cam.ScreenToWorldPoint (nuevo Vector3 (mousePosx, mousePosy, _cam.nearClipPlane + spawnHelper)); ballRigid = Instantiate (balón, BallInstantiatePoint, transform.rotation) como GameObject; . BallRigid.GetComponent () AddForce (Vector3.forward * ballForce); ballCount–; }}} 123456789101112131415161718if (Input.touchCount> 0 && camMoving) {if (! BallCount = 0) {for (int i = 0; i <2; i ++) {floatmousePosx = Input.GetTouch (i) .position.x; floatmousePosy = Input.GetTouch (i) .position.y; si (Input.GetTouch (i) .phase == TouchPhase.Began) {GameObject ballRigid; Vector3 BallInstantiatePoint = _cam.ScreenToWorldPoint (newVector3 (mousePosx, mousePosy, _cam.nearClipPlane + spawnHelper) ); ballRigid = Instantiate (bola, BallInstantiatePoint, transform.rotation) asGameObject; ballRigid.GetComponent () AddForce (Vector3.forward * ballForce); ballCount -;.}}}

    Así que eso es todo! Hemos puesto en marcha ahora TouchPosition y podemos disparar bolas con más de un dedo. No sólo eso, sino que en realidad podemos limitar el número de dedos que el jugador puede utilizar. Esto se puede hacer cambiando la condición de que el bucle. Usted puede configurarlo para i <3 o i <4 si desea, lo tengo configurado para que el jugador sólo puede utilizar dos dedos. Antes de construir esta al dispositivo, pasar por el guión CameraCharacter y eliminar cualquier referencia a MousePosition. Guardar la secuencia de comandos, permite la Unidad para compilar, y luego generar y ejecutar golpeó.

    Dos dedos de tapping pantalla tableta

    Hurra! ¡Funciona! Ahora nos hemos convertido con éxito a móvil!

    atar cabos sueltos

    Tenemos nuestro trabajo en el juego móvil, ahora sólo tenemos que ajustar algunas cosas. La primera es utilizar “BallCount” para dar al juego una ventaja más competitiva. Podemos hacer esto mediante la adición de más bolas cada vez que el jugador destruye un panel de vidrio. Esto se hace simplemente por ir a la secuencia de comandos “GlassShatter” y la adición de una línea que incrementos “Ballcount” en “OnTriggerEnter”.
    OnTriggerEnter private void (Colisionador otra) {if (other.CompareTag ( «destructiva»)) {// escoge un GameObject al azar en la matriz int objectIndex = Random.RandomRange (0, shatteredObject.Length); Instantiate (shatteredObject [objectIndex], transform.position, shatteredObject [objectIndex] .transform.rotation); // Mediante el uso de una variable estática, podemos acceder a la variable directamente CameraCharacter.ballCount + = destructionReward; Destruye (GameObject); }} 12345678910111213privatevoidOnTriggerEnter (Colisionador otra) {if (other.CompareTag ( «destructiva»)) {// escoge un GameObject aleatorio en el arrayintobjectIndex = Random.RandomRange (0, shatteredObject.Length); Instantiate (shatteredObject [objectIndex], transformar. posición, shatteredObject [objectIndex] .transform.rotation); // mediante el uso de una variable estática, que puede acceder a la variable directlyCameraCharacter.ballCount + = destructionReward; Destruir (GameObject);}}

    Pero en realidad podemos mejorar esto. Vamos a tener una variable pública llamada “destructionReward” que podemos cambiar en el inspector de modo que podamos hacer ciertos paneles de vidrio vale más.
    public int destructionReward = 2; 1publicintdestructionReward = 2;

    Y a continuación, cambiar la sintaxis de la línea de incremento:
    CameraCharacter.ballCount + = destructionReward; 1CameraCharacter.ballCount + = destructionReward;

    Ahora solo falta una interfaz de usuario que nos dirá cuántas bolas que nos queda. Ir a su script CameraCharacter y añadir en una variable pública de tipo “texto” llamada “ballText”:
    ballText Texto pública; 1publicText ballText;

    A continuación, en la función de actualización, hacemos este texto siempre que aparezca “ballCount”:
    ballText.text = CameraCharacter.ballCount.ToString (); 1ballText.text = CameraCharacter.ballCount.ToString ();

    Esta parte es opcional, pero lo hice un “if-else” para esta afirmación lógica que muestra un mensaje cuando nos quedamos sin munición:
    if (! ballCount = 0) {// Este comentario representa todo el código que va aquí :-)} else {// Esta parte es la que he añadido ballText.text = «Nos hemos quedado sin munición!»;} 12345678if ( ! ballCount = 0) {// Este comentario representa todo el código que va aquí :-)} else {// Esta parte es lo que addedballText.text = «nos hemos quedado sin munición!»;}

    Ahora sólo tiene que crear un texto en el editor de interfaz de usuario. Hice mi texto verde, bastante grande, y anclado a la parte superior.


    Asignar esto al campo “Texto de la bola” en el guión CameraCharacter


    y haga clic en generar y ejecutar!


    dedo en la tablilla de control de bola

    Funciona! Hurra! El último cabo suelto que necesitamos para atar está simplemente asegurarse de que nuestra “ballCount” siempre se restablece cada vez que reinicie el juego. Esto se hace en el método de inicio en el guión CameraCharacter:
    vacío Inicio () {ballCount = 15; cameraChar = gameObject.GetComponent (); _cam = getComponent (); } 12345voidStart () {ballCount = 15; cameraChar = gameObject.GetComponent (); _ leva = getComponent ();}

    Y eso es todo! Todos los cabos sueltos son atados, todas las bolas están desovando en el lugar correcto, y ahora podemos pasar a la sección de bonificación!

    Bono: Creación de vidrio roto en Blender

    Tenemos un juego bastante bueno. Es un reto suficiente para que siga siendo divertido. Pero lo que llevaría a este juego de ser bastante bueno a increíble ? Lo que daría a este juego la potencia extra que se necesita? La respuesta: variedad . Pensar en ello, todo lo que tenemos es una especie de aplastamiento monótono de vidrio molestos. Si pudiéramos cambiar el aspecto o la forma de la copa, que dejaría mucho de espacio para la creatividad y hacer que sea más agradable estéticamente y dinámicamente. Eso es lo que estamos haciendo en esta sección. Si eres un desarrollador de juegos, lo más probable es que ya tiene instalado Blender. Si no lo hace, puede descargarlo de forma libre en https://www.blender.org/. Abrirlo y eliminar el cubo por defecto.


    En aras de ejemplo, seguir adelante y crear una cabeza de mono.

    A continuación, vaya a Archivo -.> Preferencias de usuario


    A continuación, vaya a Complementos y búsqueda “Cell Fracture”.


    Habilitar este complemento a continuación, cierre la ventana. Debería ver un nuevo botón titulado “Cell Fracture” en la barra de herramientas.


    Si hace clic en esto, se abrirá una nueva ventana.


    Se trata de cómo se puede hacer que los objetos “Rompa” Blender para usted. Le sugiero que investigue los ajustes para sí mismo, sino que se puede dar algunas pautas generales para hacer una añicos como el cristal. En primer lugar, usted querrá más de 0,5 ruido, esto ayudará a aleatorizar la mirada. En segundo lugar, no tienen demasiada recursividad, esto aumentará considerablemente el tamaño y la complejidad de su modelo. Una vez que ha encontrado un buen conjunto de ajustes, pulse Aceptar. Después de un rato, será terminado y usted encontrará su modelo destrozada en la capa siguiente.


    A continuación, puede eliminar todo el modelo y exportar el hecho añicos como Collada (o .dae) y la importación en la Unidad. Por lo general, quiere eliminar la luz y la cámara por defecto en Blender antes de exportar.




    Además, se trata de cómo se puede arreglar algunos de los lag. Puede importar todo el cubo y volver a fracturarse con una recursividad mucho más bajo.








    Esto reducirá el número de piezas fracturadas lo que aumentará la velocidad de fotogramas en el juego porque la unidad no tiene la mayor cantidad de fragmentos a la física para calcular. Esto, junto con nuestra “CullObjectManager”, es lo que la mayoría mejoró el retraso en mi dispositivo.

    Los Scripts cambiamos

    Aquí está el código completo para el script CameraCharacter:
    utilizando System.Collections; usando System.Collections.Generic; usando UnityEngine; usando UnityEngine.SceneManagement; usando UnityEngine.UI; CameraCharacter clase pública: {MonoBehaviour velocidad de flotación pública = 1; flotador incrementFactor pública = 0.02f; flotación pública spawnHelper = 4.5fy; pública GameObject pelota; flotador ballForce pública = 700; botón pública GameObject; ballText Texto pública; public int ballCount estática = 15; // Utilizamos esto cuando ponemos en práctica interfaz de usuario bool camMoving public static = false; cameraChar CharacterController privado; // Un booleano cuyo valor será determinado por OnTriggerEnter colisión bool privado = false; _cam cámara privada; // Usar esto para la inicialización de inicio void () {ballCount = 15; cameraChar = gameObject.GetComponent (); _cam = getComponent (); } // actualización se llama una vez por cuadro de actualización de vacío () {ballText.text = CameraCharacter.ballCount.ToString (); Debug.log ( «La velocidad es» más velocidad); // Esto comprueba si hemos chocado si (colisión && camMoving!) {CameraChar.Move (Vector3.forward * * Time.deltaTime velocidad); // Esto es para que el movimiento de la cámara se acelerará la velocidad = Velocidad + incrementFactor; } Else if (colisión || camMoving!) {CameraChar.Move (Vector3.zero); } // comprueba si el jugador está tocando la pantalla y la cámara está en movimiento si (Input.touchCount> 0 && camMoving) {if (ballCount = 0) {for (int i = 0; i <2; i ++) {float mousePosx = Input.GetTouch (i) .position.x; flotar mousePosy = Input.GetTouch (i) .position.y; si (Input.GetTouch (i) .phase == TouchPhase.Began) {GameObject ballRigid; Vector3 BallInstantiatePoint = _cam.ScreenToWorldPoint (nuevo Vector3 (mousePosx, mousePosy, _cam.nearClipPlane + spawnHelper)); ballRigid = Instantiate (balón, BallInstantiatePoint, transform.rotation) como GameObject; . BallRigid.GetComponent () AddForce (Vector3.forward * ballForce); ballCount–; }}} Else {// Esta parte es la que he añadido ballText.text = «Nos hemos quedado sin munición!»; }}} Private void OnTriggerEnter (Colisionador de otra) {if (other.CompareTag ( «cristal»)) {colisión = true; Debug.log ( «chocó contra el vidrio !! Man down !!»); camMoving = false; button.SetActive (true); }} Public void StartCam () {camMoving = camMoving!; } Public void Reset () {SceneManager.LoadScene ( «Escena1»); }} 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798usingSystem.Collections; usingSystem.Collections.Generic; usingUnityEngine; usingUnityEngine.SceneManagement; usingUnityEngine.UI; publicclassCameraCharacter: MonoBehaviour {publicfloatspeed = 1; publicfloatincrementFactor = 0.02f; publicfloatspawnHelper = 4.5fy; publicGameObject bola; publicfloatballForce = 700; botón publicGameObject; publicText ballText; publicstaticintballCount = 15; // utilizamos esto cuando implementan UIpublicstaticboolcamMoving = false; privateCharacterController cameraChar; // Un booleano cuyo valor será determinado por OnTriggerEnterprivateboolcollision = false; privateCamera _cam; // Usar esto para initializationvoidStart () {= ballCount 15; cameraChar = gameObject.GetComponent (); _ leva = getComponent ();} // actualización se llama una vez por framevoidUpdate () {ballText.text = CameraCharacter.ballCount.ToStri ng (); debug.log ( «La velocidad es» más velocidad); // Esto comprueba si tenemos collidedif (colisión && camMoving!) {cameraChar.Move (Vector3.forward * * Time.deltaTime velocidad); // Esto es así que el movimiento de la cámara acelerará la velocidad UPSPEED = + incrementFactor;} elseif (! colisión || camMoving) {cameraChar.Move (Vector3.zero);} // comprueba si el jugador está tocando la pantalla y la cámara es movingif (entrada. ! touchCount> 0 && camMoving) {if (ballCount = 0) {for (int i = 0; i <2; i ++) {floatmousePosx = Input.GetTouch (i) .position.x; floatmousePosy = Input.GetTouch (i). position.y; si (Input.GetTouch (i) .phase == TouchPhase.Began) {GameObject ballRigid; Vector3 BallInstantiatePoint = _cam.ScreenToWorldPoint (newVector3 (mousePosx, mousePosy, _cam.nearClipPlane + spawnHelper)); ballRigid = Instantiate (bola , BallInstantiatePoint, transform.rotation) asGameObject; ballRigid.GetComponent () AddForce (Vector3.forward * ballForce); ballCount -;.}}} else {// Esta parte es lo que addedballText.text = «Nos’ re sin munición! «;}}} privatevoidOnTriggerEnter (Colisionador de otra) {If (other.CompareTag ( «vidrio»)) {colisión = true; debug.log ( «chocado con vidrio !! Man down !! «); camMoving = false; button.SetActive (true);}} publicvoidStartCam () {camMoving = camMoving;!} PublicvoidReset () {SceneManager.LoadScene (» Escena1″ );}}

    Y el código completo para el script GlassShatter:
    utilizando System.Collections; usando System.Collections.Generic; usando UnityEngine; public class GlassShatter: {MonoBehaviour pública GameObject [] shatteredObject; int destructionReward pública = 2; // Usar esto para la inicialización de inicio void () {} // actualización se llama una vez por cuadro de actualización de vacío () {} OnTriggerEnter private void (Colisionador de otra) {if (other.CompareTag ( «destructiva»)) {// recoge una GameObject al azar en la matriz int objectIndex = Random.RandomRange (0, shatteredObject.Length); Instantiate (shatteredObject [objectIndex], transform.position, shatteredObject [objectIndex] .transform.rotation); // Mediante el uso de una variable estática, podemos acceder a la variable directamente CameraCharacter.ballCount + = destructionReward; Destruye (GameObject); }}} 1234567891011121314151617181920212223242526272829303132usingSystem.Collections; usingSystem.Collections.Generic; usingUnityEngine; publicclassGlassShatter: MonoBehaviour {publicGameObject [] shatteredObject; publicintdestructionReward = 2; // Usar esto para initializationvoidStart () {} // actualización se llama una vez por framevoidUpdate () {} privatevoidOnTriggerEnter (Colisionador otra) {if (other.CompareTag ( «destructiva»)) {// recoge un GameObject aleatorio en el arrayintobjectIndex = Random.RandomRange (0, shatteredObject.Length); Instantiate (shatteredObject [objectIndex], transform.position, shatteredObject [objectIndex] .transform.rotation); // mediante el uso de una variable estática, podemos acceder a la variable directlyCameraCharacter.ballCount + = destructionReward; Destruir (GameObject);}}}

    Si estaba confundido cuando hicimos cambios a la guiones, aquí es todo lo que se puede copiar y pegar.

    Conclusión

    Enhorabuena! Usted ha encontrado la tercera pieza de su rompecabezas y ahora puede completar su obra maestra. Esto es un logro menor, por lo que debe estar muy contento con uno mismo. Espero que hayas encontrado que es útil e instructivo.

    Si alguna vez se encuentra en su escritorio, mirando a su equipo, ya que no tiene absolutamente ninguna idea de videojuegos (cada desarrollador de juegos ha experimentado esto), entonces usted sabe dónde buscar inspiración! Ir a la tienda de aplicaciones, elegir un juego que le gusta jugar, y luego innovar en sus conceptos en su propia manera. De esta manera se puede mejorar o cambiar las cosas sobre él, mientras que el aprendizaje y la mejora de sus habilidades de desarrollo de juegos. Así que de nuevo os animo:

    Seguir haciendo grandes juegos!

    Mensajes relacionados

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *