Una guía para el animador de la Unidad de caracteres 2D – GameDev Academia

Tabla de contenidos

Introducción

¿Qué es lo que hace un animador? Lo que puede dar resumen que describa con precisión las operaciones de un animador Realiza? Es un animador un ilusionista artista? ¿Es un titiritero virtual? ¿Qué pasa con los animadores de videojuegos? ¿Son muy diferentes de un animador de la pluma y lápiz?

Yo diría que cuando se trata de juegos de vídeo, los animadores son a la vez un ilusionista y un titiritero. Un ilusionista que la artesanía un movimiento realista, y un titiritero que orquesta este movimiento. En este tutorial, vamos a tomar un personaje animado y ser su titiritero. Tomaremos los movimientos animados de este personaje y dictar a él cuando va a correr, saltar o caminar. Vamos a crear un sistema de máquinas que inteligentemente realizará la transición entre las acciones y tomar la entrada de teclado del usuario. Al final de este tutorial, vamos a tener un carácter completo 2D que se comporten de una manera casi se podría esperar que se declare, “No hay cuerdas de mí!”

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

    Requisitos

    Este tutorial utiliza un sprite 2D que fue aparejado en este tutorial (Rig un personaje 2D en la Unidad) y animado en este tutorial (animar a un personaje 2D en la Unidad). Si usted está interesado en el aparejo de sprites 2D o animación, echar un vistazo a esos dos tutoriales. Ambos son una visión en profundidad de manipular y animar un personaje. O, si lo desea, puede descargar los archivos de proyecto desde el tutorial de animación y entrar de lleno en éste. Aquí hay un enlace a los archivos de proyecto que le ayudará a empezar en este tutorial: los archivos del proyecto. Este proyecto también requiere que el “Animación 2D”, “2D Sprite desuello,” y “paquetes 2D cinemática inversa” así que asegúrese de que haya los descargados e importados en su proyecto antes de continuar (para obtener instrucciones sobre cómo descargar e importar los paquetes, se refieren a la primera parte de este tutorial: Aparejo de un personaje 2D en la Unidad). También, una cierta familiaridad con C # sería muy útil. Sin embargo, si no se tiene confianza en su C # habilidades de codificación, seguir con este tutorial de todos modos. Usted todavía será capaz de completar este proyecto, incluso si tiene un conocimiento limitado de C #.

    El Componente animador

    Empecemos examinando el componente animador. Haga clic en el carácter aventurero y tener una mirada en el componente animador.

    Una vista de la componente de la Unidad Animator.

    El campo “Controller” es donde asignamos un controlador animador.

    Una mirada más cercana en el campo Controller en el componente Animator.

    Una “Controlador animador” nos permite crear interacciones entre las animaciones. Es donde todo el correr, saltar, caminar y acciones reúne en un solo sitio unificado. Ya tenemos uno asignado a este campo y se puede ir a Ventana -> Animación -.> Animador para ver lo que un animador controlador busca como

    Acceso a la ventana Unidad Animator.

    Una vista del controlador animador unidad

    Como se puede ver, todas nuestras animaciones se almacenan aquí listo para que hagamos las interacciones de estructura entre ellos. Por ahora, sin embargo, Volvamos al componente animador y siguen examinándola.

     el campo de Avatar en el componente de la Unidad animador

    El campo “Avatar” es bastante explica por sí mismo. Aquí es donde queremos asignar la propiedad de Avatar. Se dará cuenta de este campo está vacío. Esto se debe a un avatar es principalmente para los humanoides en 3D en lugar de 2D. Dado que estamos operando en 2D, no tenemos necesidad de un avatar.

    Raíz de movimiento en el animador de la Unidad.

    “Aplicar Raíz de movimiento” determinará si nuestro personaje se moverá de forma aditiva. Con esta activada, nuestra animación será lo que impulsa a la locomoción de nuestro objeto no las secuencias de comandos del objeto de juego. Obviamente, esto contribuye a una animación de personajes más realista pero requiere el animador para animar realmente el personaje se mueve hacia adelante. Todo nuestro caminar y correr animaciones tienen el movimiento hacia adelante de animación en el clip por lo que queremos esta habilitado.

    con la raíz de movimiento habilitado:


    Sin Raíz de movimiento:


    “Modo de actualización” determina qué velocidad de imagen del animador debe utilizar.


    “normal” simplemente utiliza la frecuencia de cuadro que utiliza el método Update (). Este es el que vamos a utilizar, ya que es coincidirá con la velocidad de fotogramas actual del juego. “Animate Physics” utiliza la velocidad de fotogramas que los usos FixedUpdate (). Es mejor para animaciones con una gran cantidad de interacciones físicas, ya que opera en una frecuencia de imagen completamente diferente de “normal”. Y “Time Sin escala”, simplemente se ejecuta todas las animaciones a la velocidad de 100%. Este es el mejor para las animaciones de interfaz de usuario que no están tratando de ser realista y no tienen interacciones físicas.


    “Modo Matanza” determina cómo se comportan las animaciones cuando están fuera de la vista de la cámara. “Siempre Animate” mantendrá la animación en ejecución. Esto es obviamente la opción más intensivo de memoria, pero para un juego en 2D, no va a hacer mucha diferencia. “Cull actualización Transform” hará una pausa en la animación, pero continuará actualizando la transformación. Y “Cull completamente” desactivará todo. Por el bien de este tutorial, voy a configurarlo para que siempre Animar.

    Ahora que tenemos algún conocimiento razonable del componente de animador, vamos a empezar a trabajar en el controlador animador!

    Creación de la Ejecución Mecánico

    Si no lo ha hecho, vaya a Ventana -> Animador y muelle en la pestaña animador en algún lugar de su espacio de trabajo. Elegí a ponerlo directamente debajo de la vista de la escena. Se dará cuenta de que todos nuestros animaciones muestran aquí como rectángulos grises.


    Son los llamados “estados” en la Unidad. Se dará cuenta de que uno de ellos es de color naranja. Esto se conoce como el “estado predeterminado” y es esto es lo que va a funcionar tan pronto como se juega el juego.


    La primera acción que tenemos que hacer para nuestro carácter es la capacidad de correr y caminar. Así que vamos a pensar en cómo vamos a hacer esto. Tenemos dos animaciones, correr y caminar. Necesitamos una manera de tener ambas cosas en orden correlativo. Cuando el jugador pulsa las teclas de flecha izquierda y derecha, las necesidades de carácter para pasar de un estado de reposo a un estado de ejecución sin que sea una transición desigual de pie a la carrera. Podemos prevenir una transición desigual por tener la mezcla entre el carácter de inactividad, caminar y correr animaciones.

    La forma en que lo haría en esta unidad es mediante la creación de lo que se conoce como un “árbol de mezcla.” Una mezcla del árbol tomará una serie de animaciones y se mezclan entre ellos en base a la entrada de un parámetro. Esta explicación puede ser un poco confuso, así que vamos a ver cómo se ve en la práctica.

    Haga clic derecho en un espacio vacío en su animador y seleccione “Crear Estado -.> De nuevo la mezcla del árbol”


    El nombre de “Locomotion”. Haga clic derecho en el árbol de mezcla y seleccione “Establecer como estado de capa por defecto.”


    Esto significa que tan pronto como llegamos a juego, el árbol mezcla de juego se iniciará inmediatamente. Ahora haga doble clic en el árbol de mezcla para abrirlo.


    Un par de cosas que debe tener en cuenta. En primer lugar, el “Tipo Blend” está ajustado a 1D.


    Esto significa que el árbol de mezcla sólo tomará la entrada de un parámetro. Los otros tipos ( “2D simple direccionales”, “2D de forma libre direccional”, “2D de forma libre cartesianas”, y “directa”) emplean más de uno. En este tutorial, sólo vamos a utilizar 1D, pero echar un vistazo a este tutorial del juego Dev Academia (Unidad Animador – guía completa). Si desea un análisis más en profundidad en esta parte del árbol mezcla < / p>

    En segundo lugar, si hace clic sobre el panel “Parámetros”, verá que ha creado un nuevo parámetro llamado “Mezcla”.


    Hay diferentes tipos de parámetros ( “flotar”, “int”, “bool”, y “activación”) y todos ellos se comportan algo así como variables en el animador de la Unidad. También se puede acceder a través de scripts que vamos a hacer un poco más tarde. Un árbol de mezcla requiere que tengamos un parámetro de lo que se ha creado automáticamente una para nosotros. Esto es lo que determinará cuando una cierta animación se reproducirá. Vamos a nombre de “velocidad”, ya que la velocidad es lo que va a determinar si nuestro personaje está corriendo o caminando.

    Ahora, vamos a construir el cuerpo de este árbol mezcla. Golpear el icono más en el inspector y añadir tres nuevos campos de movimiento.


    Arrastre nuestros espacios muertos, caminar y Run en estos campos.


    Debido a que “Automatizar Umbrales” está marcada, podemos utilizar la diapositiva en la parte inferior de la preciosa plaza de mezcla para ver exactamente cuando nuestro personaje va a correr. exitosa obra y arrastre el control deslizante alrededor.


    Como se puede ver, nuestro personaje correr o caminar en función del valor del parámetro de velocidad. Puede personalizar los umbrales desmarcando “umbrales” Automatizar y cambiando los valores. Normalmente dejar uno como el valor máximo de velocidad así que no ir más allá de eso. Me gustan los umbrales de corriente (en reposo a 0, caminar a 0,5, y funcionando a 1), así que sólo voy a salir de “umbrales” automatizar las comprueban.

    Creación de la mecánica de salto

    El mecánico final para nuestro carácter! Esto tiene un poco de una estructura diferente que el árbol de mezcla de locomoción, ya que, si recuerdan, hicimos tres poses para nuestro mecánico salto en lugar de tres animaciones. Así que esta mecánica se va a hacer uso de algo llamado “Transiciones”. El nombre es bastante explica por sí mismo, sin embargo, vamos a mirar a las diversas formas en las que puede ajustar las transiciones para darnos esa mirada de salto.

    En primer lugar, crear un nuevo parámetro de disparo llamado “Jump” y un parámetro booleano llamado “a tierra”.


    [debe ser “a tierra” en lugar de “tierra”]

    Jump es lo que vamos a utilizar para determinar si el jugador ha presionado el botón de salto y conectado a tierra es lo que vamos a utilizar para determinar si el jugador está en el suelo. A continuación, localizar sus tres poses de salto ( “jumpup”, “el aire,” y “aterrizado”) y colocarlos cerca unos de otros. Ahora, haga clic en “jumpup” y seleccione “hacer una transición.”


    Se dará cuenta de una flecha blanca ha llegado desde el estado jumpup y ahora está siguiendo al cursor.


    Haga clic izquierdo en el estado “MidAir” (utilizo el término “Estado”, “pose” y “animación” de manera intercambiable en esta sección). Ahora ha creado una transición! Crear otra transición desde el aire para aterrizado y que va a completar la mayor parte de nuestro mecánico.


    Ahora, sólo tenemos que personalizar cada transición.

    Transitions

    Seleccione el jumpup a la transición MidAir.


    Aviso de todos los ajustes que aparecen en el inspector.


    “Tiene tiempo de salida” determinará si la animación se reproducirá hasta el final o la transición de inmediato. Los otros ajustes menores de la “configuración” desplegable son todos bastante explica por sí mismo y se pueden configurar en la línea de tiempo que vemos en esta ventana.


    Esta linea de tiempo se determinará cuánto tiempo será la transición y donde en el clip se realizará la transición. El único ajuste que aquí no se puede personalizar a través de la línea de tiempo es la “interrupción de la fuente.”


    Ahora mismo está ajustado en “Ninguno”, que significa la transición en esencia no puede ser interrumpido (hay excepciones a esto lo que vamos a ver más adelante). Este es el escenario que queremos para el salto mecánico pero vale la pena echar un vistazo a las otras opciones en caso de que va a tener necesidad de ello en sus otros proyectos. Haga clic en este ajuste y observe todas las otras opciones.


    Esto determina qué jugarán transiciones si se detecta una interrupción en la transición actual. Todas las opciones parecen tipo de ambigüedad, pero si usted mira fijamente ellos por un tiempo, empiezan a explicarse. Por ejemplo, si se establece en “Estado actual Luego Siguiente Estado”, cuando se interrumpe la transición, que desempeñará las transiciones que están en el estado actual y luego reproducir las transiciones en el siguiente estado. Lo contrario es cierto para “Next Estado Luego estado actual.” Si se interrumpe esta transición, se reproducirá inmediatamente las transiciones en el siguiente estado y luego reproducir las transiciones en el estado actual. Esto parece muy complicado, pero espero que pueda ver lo útil que podría ser. Imagine que tiene una secuencia de morir. Si el personaje es golpeado por una bala fatal, le gustaría que el éxito de animación normal a jugar y luego le gustaría que la animación troquel para jugar (probablemente en ese orden). Y le gustaría que todo esto interrumpir cualquier transición estaba reproduciendo en ese momento. Interrupción de la fuente parece complicado, pero espero que vea lo útil que podría ser.

    La configuración definitiva tenemos que mirar es el cuadro de “Condiciones”.


    Aquí se puede decir que el animador para comprobar ciertos parámetros en un escenario de “verdadero o falso”. Si todos se cumplen las condiciones, entonces la transición jugarán. Si está vacío, simplemente jugar la transición después de que haya transcurrido el tiempo de salida. Vamos a utilizar las condiciones de caja para determinar si el gatillo “Jump” ha sido activada y si el jugador ha aterrizado. Por el momento, sin embargo, hay una cierta importancia limpieza que tenemos que hacer con el fin de completar nuestra Jump mecánico.

    Máquinas subestatales

    Reducir y tener una visión completa de su controlador animador.


    Se ve muy desordenado. Hay media docena de estados de animación, transiciones que van por todo el lugar, y sólo una falta general de orden. Esto conduce a un flujo de trabajo muy ineficiente porque tenemos que aplicar un poco más de las transiciones en esto para completar el mecánico Jump. Aquí es donde tenemos que introducir un instrumento llamado “Sub máquina de estado.” A Sub máquina de estado es esencialmente una instancia del controlador animador que existe dentro del controlador animador más grande. Esto significa que podemos poner todas nuestras posturas salto en el Sub Machine Estado y hacer que se comportan de la misma manera que son ahora. Esto poner en orden nuestro espacio de trabajo y aumentar la eficiencia de nuestro controlador.

    Haga clic derecho en un espacio vacío y seleccione “Crear Máquina de Estado Sub.”


    nombre de este “salto”. Eliminar el inicio, Walk y animaciones Run si todavía están en el animador.


    Ahora, seleccionar nuestros tres poses salto y arrastrarlos en la parte superior de la máquina sub-estado para colocarlos dentro de la misma.


    Doble click en la máquina sub-estatal para abrirlo.


    Se puede volver a la capa de base mediante el uso de la miga de pan en la esquina superior izquierda.


    Se dará cuenta de la presencia de los cuatro estados. “Cualquier Estado”, “entrada”, “Salir” y “(hacia arriba) capa de base.”


    “Cualquier Estado”, “entrada”, y existen “Salir” en la capa de base; Capa Base arriba es el único estado nuevo estemos dentro de esta máquina sub-estado. Cualquier medio del Estado si la condición de la transición que viene de él es cierto, entonces se hará una transición sin importar lo que la animación se está reproduciendo. Este es el único estado que interrumpirá interrupción de la fuente cuando está establecido en “Ninguno”. La entrada es simplemente cada vez que la máquina de sub-estado se ha hecho la transición a. En la capa de base, esto es lo que se llama la derecha tan pronto como se golpeó juego en el editor. Si se va a la transición en esta máquina sub-estado, que sería ir a través de este estado. “Capa Base arriba” y la función “Salir” de manera similar, sin embargo, en la Capa Base Hasta puede especificar qué Estado desea transición hacia la salida mientras que el estado simplemente va al estado de entrada en la capa de base.

    Configuración del Salto Sub-Máquina de estado

    Sobre el papel, las funciones de estos estados puede ser confuso, pero si se toman en su valor nominal, que tiene sentido intuitivo. Para nuestro Saltar Mecánico, queremos transición del “Cualquier Estado” a nuestra postura jumpup. Haga clic derecho en el estado Cualquier Estado y hacer una transición. Esta transición tiene que tener una condición. Esta condición debe ser el parámetro de disparo “salto”.


    Al igual que. Ahora, cada vez que se activa el gatillo, el personaje saltará no importa qué acción se está ejecutando actualmente.

    La configuración de esta transición son simples. Tenemos que desactivar “Tiene tiempo de salida”, ya que no queremos que la animación anterior se ejecute por completo y queremos que el personaje salte de inmediato. A continuación, tenemos que especificar una duración. Debe ser algo muy corto, ya que, como he dicho antes, que quieren que haya ningún retraso con este salto. He encontrado un valor de “0,25” para trabajar bien.


    En esta siguiente transición (el salto a mediados de transición Air) hacemos uso del parámetro booleano “Grounded”. Dado que este parámetro es lo que vamos a utilizar para determinar si el personaje está tocando el suelo o no, queremos que la pose “mediados de aire” para jugar, mientras que el personaje está en el aire. Crear una condición para el parámetro a tierra cuando se establece en “false”. Esta es la única condición que necesitamos así que vamos a realizar otros ajustes. No importa mucho si hay un tiempo de salida de estas animaciones ya que son tan corto. Simplemente dejar que sea lo que sea por defecto. Ahora tenemos que establecer una duración. Queremos que la transición sea muy rápido ya que la transición de salto a mediados de aire. Ponerlo en “0.1” ya que esto nos da suficiente transición sin ralentizar el mecánico.


    Hemos terminado con esta transición! Sólo tenemos que configurar dos más.

    El mediados de aire a la transición Landed es similar a la transición anterior en que tiene que ser extremadamente rápida. Este es el momento en que los efectos del carácter de la tierra y que se vería raro si hubo una reacción retardada. Establecer la duración a ser casi nada en “0,01”. Para esta transición, que podría ser una buena idea para desactivar el tiempo de salida en caso de salir de una revisión de esto contribuiría a unos minutos de retraso. Y, por último, tenemos que tener una condición. Al igual que la transición anterior fue cuando el personaje estaba en el aire, éste será cuando el personaje impactos con el suelo. Por lo tanto, necesitamos una condición para el parámetro a tierra cuando se establece en “true”.


    Y con eso, nuestra transición configurado! Ahora a la final.

    Esta transición final es cuando el personaje “recoge a sí mismo”, después de impactar el suelo. Esta transición no debería tener condiciones y podemos dejar habilitado el tiempo de salida ya que no estamos de preocuparse por las reacciones retardadas aquí. En cuanto a la longitud de duración, Yo la mía a 0,25, pero os animo a ajustar este valor. Un valor más grande tendrá una apariencia “lenta atuendo”, mientras que un valor más corto tendrá una “rápida recoger.”

    El aspecto final tenemos que configurar con esta transición es donde se realizará la transición a. Tenemos dos opciones, podríamos transición en el estado de capa base o hasta el Estado de salida. Podríamos obtener el mismo resultado para cada opción, pero uno tiene algunos beneficios aparentes de que el otro no posee. La mejor opción aquí es la transición al estado de la salida por dos razones; el primer ser que aumenta la escalabilidad de la Controller Animator. Si utilizamos capa hacia arriba Base, tendríamos que especificar el estado de transición a. Este no es un problema para nosotros, ya que sólo tienen un otro estado (el estado Locomotion) pero lo que si teníamos más de uno? Tendríamos que priorizar qué estado de transición en después de que se están subiendo terminado que es algo que no se debe hacer cuando se trata de crear un controlador de animador eficiente. La segunda razón es que hace que nuestra mirada controlador animador muy ordenado. Echar un vistazo a la capa base y aviso de lo limpio que parece tener sólo una transición en el estado de locomoción. En última instancia, la transición al estado de salida es la mejor opción para el orden y la escalabilidad.


    ¡Muy bien! Eso es todo por nuestra Salto mecánico! Ahora es completa

    Scripting nuestro carácter

    Si se va a pulsar el botón Reproducir, se puede controlar el carácter de tocar el violín con los valores en el panel de parámetros sino que lo convierte en un juego muy pésimo. En su lugar, tenemos que ser capaces de modificar estos valores a través de alguna forma de entrada como el teclado.

    Crear una nueva carpeta llamada “Scripts” y crear una nueva secuencia de comandos de C # llamado “PlayerController.”


    Este es el código que va a entrar en ella:
    utilizando System.Collections; usando System.Collections.Generic; usando UnityEngine; PlayerController clase pública: {MonoBehaviour privada animador thisAnim; Rigidbody2D privada rígida; flotador groundDistance pública = 0.3f; flotador JumpForce pública = 500; LayerMask whatIsGround pública; // Usar esto para la inicialización de inicio void () {thisAnim = getComponent (); rígida = getComponent (); } // actualización se llama una vez por trama de actualización void () {var h = Input.GetAxis ( «horizontal»); thisAnim.SetFloat ( «Speed», Mathf.Abs (h)); si (h <0,0) {transform.localScale = nuevo Vector3 (-1, 1, 1); } Else if (h> 0,0) {transform.localScale = new Vector3 (1, 1, 1); } If (Input.GetButtonDown ( «Jump»)) {rigid.AddForce (Vector3.up * JumpForce); thisAnim.SetTrigger ( «saltar»); } If (Physics2D.Raycast (transform.position + (* Vector3.up 0.1f), Vector3.down, groundDistance, whatIsGround)) {thisAnim.SetBool ( «Grounded», true); thisAnim.applyRootMotion = true; } Else {thisAnim.SetBool ( «Grounded», false); }}} 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152usingSystem.Collections; usingSystem.Collections.Generic; usingUnityEngine; publicclassPlayerController: MonoBehaviour {privateAnimator thisAnim; privateRigidbody2D rígido; publicfloatgroundDistance = 0.3f; publicfloatJumpForce = 500; publicLayerMask whatIsGround; // Usar esto para initializationvoidStart () {thisAnim = getComponent < animador> (); rígida = getComponent ();} // actualización se llama una vez por framevoidUpdate () {varh = Input.GetAxis ( «horizontal»); thisAnim.SetFloat ( «Speed», Mathf.Abs (h )), si (h <0,0) {transform.localScale = newVector3 (1,1,1);} elseif (h> 0,0) {transform.localScale = newVector3 (1,1,1);} Si (Input. GetButtonDown ( «Jump»)) {rigid.AddForce (Vector3.up * JumpForce); thisAnim.SetTrigger ( «Jump»);} if (Physics2D.Raycast (transform.position + (* Vector3.up 0.1f), Vector3.down , groundDistance, whatIsGround)) {thisAnim.SetBool ( «Grounded», true); thisAnim.applyRootMotion = true;} else {thisAnim.SetBool ( «Grounded», false);}}}

    Esta script requiere que el personaje tenga un componente 2D cuerpo rígido y un colisionador de algún tipo. He definido mi escena para que parezca esto, así que pude probar mi personaje:


    Con este script, es importante tener en cuenta cómo se accede a los parámetros del controlador animador. Utilizamos una variable de tipo “animador” y acceso a un parámetro diciendo “.SetBool (* Nombre del parámetro *, * Valor *).” Otras dos características importantes son la forma en que tomamos de entrada y cómo se asigna el valor booleano de la “puesta a tierra”. La asignación de este booleano fue el más desconcertante para mí cuando yo estaba aprendiendo a trabajar el animador Unidad. Lo que estamos haciendo es enviar un raycast (un raycast es simplemente un tiro de rayos en una dirección especificada que se pueden recopilar datos acerca de lo que golpea) en la dirección hacia abajo y determinando de este modo si el personaje está tocando el suelo o no.

    La forma estamos dando entrada está diciendo “Input.GetAxis (‘* especificar nombre del eje *)’. Esta es una manera buena para tomar la entrada ya que es multiplataforma, es decir, que no tendría que cambiar este valor si se va a exportarlo como un juego de consola o como un juego de PC. Vaya a Editar -> Ajustes del proyecto -.> Entrada para ver exactamente lo que está sucediendo en este método



    Para un juego de escritorio, la entrada “horizontal” es la teclas de flecha izquierda y derecha. Por lo tanto, si se golpea el juego, ahora se puede operar nuestro personaje a través del teclado. Muy bueno, ¿no es así?


    Si intenta saltar en su juego y el aviso de que el personaje siempre parece estar atascado en una pose salto, marque la casilla “¿Qué es la tierra” variable sobre su guión PlayerController. Tiene que ponerse en “todo” con el fin de que funcione.


    Conclusión

    Este personaje fue manipulada, animado, y con guión de todo desde cero. Si fueron capaces de completar los tres de nuestros tutoriales de animación, que, con el poder que me otorga como desarrollador de juegos, que no declarar un videojuego oficial “Puppet Master”. No es poca logro de haber completado todo eso. Estoy seguro de que encontrará estas habilidades usan una y otra vez en sus propios proyectos de videojuegos. Eso es todo para mí.

    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 *