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

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Reg铆strate

Comienza en:

3D
22H
49M
42S
Curso de C# para Videojuegos

Curso de C# para Videojuegos

Juan Gabriel Gomila

Juan Gabriel Gomila

Correcci贸n del Bug del salto

20/53
Recursos

Aportes 13

Preguntas 2

Ordenar por:

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

o inicia sesi贸n.

Para pausar el juego yo utilize del atributo Time.timeScale, este atributo te permite establecer que tan rapido se va a ejecutar el juego. por ejemplo:

Si Time.timeScale = 1f; el juego corre a la velocidad normal
Si Time.timeScale = 2f; el juego corre el doble de r谩pido
Si Time.timeScale = 0.5f; el juego corre m谩s lento (se podr铆a usar como efecto slow motion para una pantalla de selecci贸n de arma por ejemplo)
Si Time.timeScale = 0f; el juego se pausa

Para el caso de este juego en el metodo Update del GameManager script agregue el siguiente condicional:

        if (currentGameState != GameState.inGame) {
            Time.timeScale = 0f;
        } else {
            Time.timeScale = 1f;
        }

yo lo hice en el update en el if que manda a llamar el metodo jump y me funciona igual, cual ser铆a la diferencia aparte de que el c贸digo va a estar chequeando a cada frame si esta en estado 鈥渋nGame鈥 o no, donde es mejor crear la condicional de que no salte a menos que este 鈥渋nGame鈥?

Yo lo arregl茅 cambiando el nombre del InputManager de Submit a Start
https://drive.google.com/file/d/1UV0jzz4gtBLzXolzKPJOxcTAcg1Va56x/view?usp=sharing

Para corregir el bug, puse una condicion mas en el if del metodo Jump

if (IsTouchingTheGround() && GameManager.sharedInstance.currentGameState == GameState.inGame)
        {
            rigidBody.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
        }

JA, tan facil, no veia donde, pense que era un error mio

Lo que hice para solucionar que no se moviera el player cuando no este InGame fue crear una animacion 鈥淧layerIdle鈥 para que estuviera estatico la cual se activa al no estar en InGame y cuando este InGame activar el "PlayerWalk.
Para el caso del brinco, rodeas el codigo como lo explico el profe en donde hacemos el input del Jump.

void Update() {
        //Jump
        if(GameManager.sharedInstance.currentGameState == GameState.inGame){ //Brincar solo si estamos InGame
            if (Input.GetButtonDown("Jump")){
                Jump();
            }
        }
        anim.SetBool(STATE_ON_THE_GROUND, IsTouchingTheGround());

        Debug.DrawRay(this.trans.position, Vector2.down * 1.5f, Color.red); //Dibujar la linea imaginaria RAYCAST en modo gizmos
    }

    void FixedUpdate() { //Evitar el retraso en movimiento si hay bajon de fps...Ritmo fijo
        //Walk
        if(GameManager.sharedInstance.currentGameState == GameState.inGame){
            if (rb.velocity.x < runningSpeed){
                rb.velocity = new Vector2(runningSpeed, rb.velocity.y);
                anim.Play("PlayerWalk");
            } // Si estamos en la partida, activar el caminar del personaje
        } else{
            rb.velocity =  new Vector2(0, rb.velocity.y) ; //Desactivar mov del player al no estar en InGame
            anim.Play("PlayerIdle");

        }

    }

Yo logre solucionarlo igual q el profe

Alguien sabe por que cuando le doy espacio o click izquierdo salta? yo he hecho todo lo que hizo el profesor y nada, por favor si alguien sabe por que por favor diganmelo

Otra opcion para poder hacer esto seria:

   void Update()
    {
        if (Input.GetButtonDown("Jump"))
        {
            if (GameManager.sharedInstance.currentGameState == GameState.inGame)
            {
                Jump();
            }
            
        }

        animator.SetBool(STATE_ON_THE_GROUND, isTouchingTheGround());

        Debug.DrawRay(this.transform.position, Vector2.down * 1.5f, Color.red);
    }```

Realmente no encontre como detener el salto del player. Hago el procedimiento se帽alado![](

Tambi茅n se puede hacer que detecte el estado del juego como condici贸n adicional en el if donde se verifica la tecla de salto, queda algo as铆 (utilic茅 la tecla J como tecla de salto):

if (Input.GetKeyDown(KeyCode.J) && GameManager.sharedInstance.currentGameState == GameState.inGame)

As铆 solo llamar谩 a la funci贸n Jump() cuando se cumplan las 2 condiciones a la vez.

la manera que use yo para arreglar ese bug es esta
yo no agregeun if nuevo si no que cuando este en el piso
debe estar en el suelo el estado de juego debe ser in Game

if (EnelSuelo() && GameManager.SharedScript.CurrentGameState == GameStates.Jugando) {
			body.AddForce (Vector2.up * JumpForce, ForceMode2D.Impulse);
			anim.Play ("Jump");
		}

yo corregui el bug cojiendo el if que programamos en la clase pasada
if (GameManager.sharedInstance.currentGameState == GameState.inGamer) encerrando el if (Input.GetButtonDown(鈥淛ump鈥))
{
Jump();
}