El personaje y el controlador
Introducción: De la idea al desarrollo
Estructura de carpetas en Unity
Assets, Game Objects y Sprite Atlas
Animaciones desde un sprite map
Animation Controller y Transiciones
Plataformas y gravedad
Física en Unity
El script de control
Programando funciones en C# y Unity: Jump
Detectar el suelo con Raycast
Herramientas de debugging visual
Cambiar las animaciones según los estados
Reto: Terminando nuestras animaciones
Solución del reto
Hacer que el personaje camine
El manager del videojuego
Cómo funciona el Game Manager
El Singleton
El modo de juego
Input manager y juegos multiplataforma
Corrección del Bug del salto
La zona de muerte
Reiniciar la partida
Corrigiendo los bugs al reiniciar nuestro juego
Diseño procedural de niveles 2D
El diseño de niveles a mano
Configurando nuestros assets para el diseño procedural
Generación procedural de niveles
Creando la zona que eliminará bloques del nivel excedentes
Añadir un nuevo bloque de forma aleatoria
La cámara que sigue al jugador
Destrucción de bloques antiguos
Terminando de programar la destrucción de bloques antiguos
Solucionando el salto de la cámara al reiniciar el juego
HUD, menús y gameplay
El canvas en Unity
Uso de botones para crear un menú
La lógica de los menús
Ejercicio: Preparando el menú del juego
Programando el menú del juego
Los coleccionables del juego
Actualizar UI de coleccionables
Iniciando con pociones y maná
Pociones de vida y maná
Programando las barras de vida y maná
Calculando los puntajes con la distancia y el tiempo de juego
La lógica del maná
Enemigos y dificultad
Plataformas móviles
Iniciar movimiento de la plataforma con trigger
Enemigos móviles
Enemigos móviles: preparando nuestro enemigo para girar
Enemigos móviles: programando que gire al chocar
Arreglando el collider de nuestra roca
Programando la condición de muerte del personaje
Añadiendo música de fondo a nuestro videojuego
Añadiendo efectos de sonido y cierre del curso
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 21
Preguntas 2
Invoke: Cuando nuestro personaje resucita tenemos el problema de que durante un primer instante aparece la animación del personaje muerto. Para solucionarlo, vamos a resucitar a nuestro personaje y después de un delay muy corto acomodar al personaje en su posición inicial.
invoke sirve para retrasar la invocacion de un metodo
También podemos lograr pasar los frames en los cuales el Player aún está con la animación de Die usando las corrutinas:
public void StartGame()
{
animator.SetBool(STATE_ALIVE, true);
animator.SetBool(STATE_ON_THE_GROUND, false);
StartCoroutine(ResetPositionAndVelocity());
}
IEnumerator ResetPositionAndVelocity()
{
yield return new WaitForSeconds(0.3f);
transform.position = startPosition;
rigidBody.velocity = Vector2.zero;
```
El nivel de modulación / organización del profesor es impresionante
Lo que yo hice para que la animacion de morir no apareciera quando le damos restart al juego fue en el animator, en la flecha de transition de la animacion de muerte para run, abajo de “Has exit time” dice “Settings” con una flechita, si le hacen click aparecen varias cosas. Yo le puse la Transition Duration en 0 e funciono sin tener que usar el metodo Invoke.
Un metodo sencillo para deshacerse del pequeño frame en el que el personaje se ve muerto es reducir el tiempo de transición de las animaciones de “Die” y “Run” a 0, esto se pude hacer en el animator al darle click a la flechita de transición que une a las animaciones de “Die” y “Run” en la sección desplegable “Settings”, aparecerá la opcion “Transition duration”.
Corrección invoke 
{ SceneManager.LoadScene(SceneManager.GetActiveScene().name); //esta en la documentación de unity lo de las escenas, hay otra que es con un canvas para programar un botón de reinicio
}
y en el update coloque esta condición
if (Input.GetKeyDown(KeyCode.R))
{
RestartGame();
}
aunque lo reinicia en cualquier momento no solo cuando muere.
También podemos lograr pasar los frames en los cuales el Player aún está con la animación de Die usando las corrutinas:
public void StartGame()
{
animator.SetBool(STATE_ALIVE, true);
animator.SetBool(STATE_ON_THE_GROUND, false);
StartCoroutine(ResetPositionAndVelocity());
}
IEnumerator ResetPositionAndVelocity()
{
yield return new WaitForSeconds(0.3f);
transform.position = startPosition;
rigidBody.velocity = Vector2.zero;
```
Yo en mi caso en la animacion, solo jugue con los tiempso de salida y de entrada
Me estaba resultando algo complicado ya que mi personaje se mueve manualmente, pero ya voy comprendiendo detallitos simples q ayudan mucho.
Excelente curso!!!
Mi solución fue crear una nueva animación con los sprites de la muerte, pero en orden inverso y también con el sprite donde el personaje esta de frente, así lo que tengo al reiniciar, es el personaje levantándose de la muerte bien sonriente y volviendo a correr.
continuando con los cambios que venia realizando lo solucione de esta manera
basicamente al llamar StartGame del player consulta desde que estado lo esta haciendo, si el mismo no es pause reiniciara la pocicion del player, anulara la velocidad y cambiara su estado a vivo, en caso contrario el estado es pause y simplemente continuara desde donde estaba
public void StartGame() {
if (GameManager.shareInstance.currentState != GameState.pause)
{
this.anim.SetBool("isAlive", true);
this.transform.position = startPosition;
this.rb.velocity = Vector2.zero;
}
}
La line de código
this.rigidBody.velocity = Vector2.zero;
no hace falta porque unity tiene una función activada por defecto que hace que cada vez que te mmueves unity revisa pixel por pixel para ver si puedes pasar o no
#sepuede
Excelente clase!
Invoke
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?