El personaje y el controlador

1

Introducci贸n: De la idea al desarrollo

2

Estructura de carpetas en Unity

3

Assets, Game Objects y Sprite Atlas

4

Animaciones desde un sprite map

5

Animation Controller y Transiciones

6

Plataformas y gravedad

7

F铆sica en Unity

8

El script de control

9

Programando funciones en C# y Unity: Jump

10

Detectar el suelo con Raycast

11

Herramientas de debugging visual

12

Cambiar las animaciones seg煤n los estados

13

Reto: Terminando nuestras animaciones

14

Soluci贸n del reto

15

Hacer que el personaje camine

El manager del videojuego

16

C贸mo funciona el Game Manager

17

El Singleton

18

El modo de juego

19

Input manager y juegos multiplataforma

20

Correcci贸n del Bug del salto

21

La zona de muerte

22

Reiniciar la partida

23

Corrigiendo los bugs al reiniciar nuestro juego

Dise帽o procedural de niveles 2D

24

El dise帽o de niveles a mano

25

Configurando nuestros assets para el dise帽o procedural

26

Generaci贸n procedural de niveles

27

Creando la zona que eliminar谩 bloques del nivel excedentes

28

A帽adir un nuevo bloque de forma aleatoria

29

La c谩mara que sigue al jugador

30

Destrucci贸n de bloques antiguos

31

Terminando de programar la destrucci贸n de bloques antiguos

32

Solucionando el salto de la c谩mara al reiniciar el juego

HUD, men煤s y gameplay

33

El canvas en Unity

34

Uso de botones para crear un men煤

35

La l贸gica de los men煤s

36

Ejercicio: Preparando el men煤 del juego

37

Programando el men煤 del juego

38

Los coleccionables del juego

39

Actualizar UI de coleccionables

40

Iniciando con pociones y man谩

41

Pociones de vida y man谩

42

Programando las barras de vida y man谩

43

Calculando los puntajes con la distancia y el tiempo de juego

44

La l贸gica del man谩

Enemigos y dificultad

45

Plataformas m贸viles

46

Iniciar movimiento de la plataforma con trigger

47

Enemigos m贸viles

48

Enemigos m贸viles: preparando nuestro enemigo para girar

49

Enemigos m贸viles: programando que gire al chocar

50

Arreglando el collider de nuestra roca

51

Programando la condici贸n de muerte del personaje

52

A帽adiendo m煤sica de fondo a nuestro videojuego

53

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

Curso de C# para Videojuegos

Curso de C# para Videojuegos

Juan Gabriel Gomila

Juan Gabriel Gomila

Corrigiendo los bugs al reiniciar nuestro juego

23/53
Recursos

Aportes 20

Preguntas 2

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Les comparto un poco de como va quedando mi proyecto. Agregue un efecto de Jump cuando muere.

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

Correcci贸n invoke ![](

Finalizando la 2da parte, sigamos!

Por si a alguien le sirve para reiniciar cree este m茅todo

public void Restart()
{ 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.

Profe mi propia soluci贸n que hice fue Hacer lo que hizo usted copiar y pegar y puse un anim.Play("Run"); y me vuelve a a iniciar la animaci贸n de caminar

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

Excelente curso!!!

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 鈥淒ie鈥 y 鈥淩un鈥 a 0, esto se pude hacer en el animator al darle click a la flechita de transici贸n que une a las animaciones de 鈥淒ie鈥 y 鈥淩un鈥 en la secci贸n desplegable 鈥淪ettings鈥, aparecer谩 la opcion 鈥淭ransition duration鈥.

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.

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 鈥淗as exit time鈥 dice 鈥淪ettings鈥 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.

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