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

Solución del reto

14/53
Recursos

Aportes 30

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Desactivando Loop
Velocidad 0.2
Añadiendo nos sprites mas

yo hice esta solucion, modifique la animacion para que fuera mas lenta, despues

en el codigo meti en el update esto

animator.SetBool(STATE_IS_JUMPING, true);

^

Mi solución fue definir 3 estados de animaciones y pasar un parámetro como jumpVelocity de tipo float, de ahí definí 3 estados:

  1. jumpVelocity > 1
  2. jumpVelocity < 2 y jumpVelocity < -2
  3. jumpVelocity < 2.1

isOnTheGround false en todas.
Y de ahi
Animator.setFloat(“jumpVelocity”, rigidBody.velocity.y)

Lo solucioné utilizando un parametro boolean en el Animator, llamado isFalling, este se activa cuando la velocidad del RigidBody2D en su eje Y es menor a 0.

bool isFalling(){
		if (rigid.velocity.y < 0.5f)
			return true;
		else
			return false;
	}

No se complico mucho la vida y era mas facil desactivar el Loop time desde el principio y en el Animator alargar el tiempo entre cada movimiento?

Hice otra animacion de la caida y que se active unicamente cuando la velocidad sea negativa

En la clase anterior: "Al dividir el salto, para el jump del medio solo va 1 sprite"
En esta clase: “No se puede hacer una animación con 1 sprite” 🤣

Mi solución:

1. Dividir la animación en dos partes: **Jump **y Fall
2. Crear un parámetro booleano en el controlador de animación de Player
3. Cambiar la animación de entrada por la de **Fall **(ya que el PJ siempre inicia cayendo)
4. Agregar una función para verificar cuando el PJ está cayendo

bool IsFalling()
{
  return rigidBody.velocity.y < 0;
}

5. Agregar en el método Update ésta línea:

animator.SetBool(STATE_IS_FALLING, IsFalling());

6. Inicializar en el método Start los booleanos isFalling y isOnTheGround

animator.SetBool(STATE_ON_THE_GROUND, false);    
animator.SetBool(STATE_IS_FALLING, true);

6. Actualizar las transiciones en el Animator y la velocidad de las animaciones

Así me quedó:

Solución reto

nota de experiencia propia.
hola les recomiendo que se arriesguen a equivocarse y no vean este video directamente e intenten encontrar la respuesta

yo probe de dos formas, con la misma animación le quite el Loop y la alargue un poco para que se viera mejor cada frame, e hice el reto y cree 3 animaciones de saltos y las uni con una condicion booleana

Con este reto se puede profundizar con la implementación de la ventana de animator recordando la creación de parametros, la ejecución de transiciones y los parametros de las animaciones en el inspector.

A su vez, aprender a utilizar la ventana animation para la creación y edicion de nuevos clips para unirlos a la animacion del personaje

Sí se pueden crear animaciones con un solo sprite. Se debe crear en la ventana de animation del personaje y te da un timeline vació donde puedes arrastrar los sprites (o EL sprite). Para abrir esa ventana denle doble click a una de sus animaciones ya hechas.

mi personaje es una bolita al saltar solo hace 3 sprites con quitar el loop quedo bien

Esta solución es mas fácil de lo que creía

El sprite del inicio es simplemente la animación Idle

Yo pensé en simplemente cambiar algunos sprites y quitar el loop 😐

Simple, Hago la animacion más lenta y le desactivo el looptime Xd

Mi solución es la siguiente:

Es similar a la del profesor, pero también hay una transisión de la animación de caminar a la última animación del estado porque un personaje puede bajar de una plataforma y su animación debería ser esa última sección del salto sin el cominezo ni el medio.
También puse la transición de muerte desde el Any State al Die State para mejorar la lectura del grafo.

Mi solucion fue sencilla usando el Animator sin usar codigo. Es una solucion que cabe en este caso.

¿Alguien sabe quitar eso? uso visual Studio Code

No entiendo porque no me sale, fluido, se demora en hacer las animaciones cuando salta

hice tres animaciones y disminui la velocidad de las animaciones ![](

Asi quedo mi grafo. Agregue un estado para que el personaje este parado cuando no se le aplique nigunga fuerza.

Muy buen reto para iniciar.

genial

Me quedó sonando lo que dijeron de usar un número para la animación, así que creé una variable para la velocidad en y y se la asigno en el FixedUpdate por cada cambio que detecta. Si está en un rango entre -2 y 2 se queda con la animación de en el aire y sino a la de bajando.

Me gustó el efecto pero creo que la solución del profe es mejor, en el sentido de que no se tienen que mantener números mágicos en algún sitio diferente al código que se está trabajando. Saludos

void FixedUpdate()
    {
        anim.SetFloat(STATE_VELOCITY_UP, playerRigidBody.velocity.y);
    }

Mi solución fue agregar esta linea de codigo

if((rigigbody.velocity.y == 0) && isTouchingTheGround())
        {
            animator.SetBool(STATE_ONTHEGROUND, true);
        }

en la cual detecta si la velocidad en Y es mayor a 0 y al mismo tiempo si esta tocando el suelo con el metodo ya creado, si es verdad cambia el valor de la variable isOnTheGround a true, lo que inicia la animación de correr nuevamente.

Lo que hize fue crear las tres animaciones con las transiciones y todo, pero en la animacion de muerte se queda en un loop, si alguien me ayuda?

yo también solo desactive el loop time y le baje la velocidad a las animaciones

donde se encuentra el loop time?