Introducción

1

Game Design del juego

2

La estructura y assets de un proyecto en Unity

3

Convirtiendo nuestros assets en Tiles

4

Tilemaps y creación del escenario

5

Bonus: FastForward de la creación del escenario, sorting layers y creación de colliders

6

Acá encontrarás los archivos de este curso

Personaje principal: Movimiento y Animaciones

7

El jugador y el movimiento

8

Creando nuestra primera animación

9

Creando el grafo de animaciones

10

Usando un árbol de animaciones

11

Mostrando la solución del desafío e implementando transición entre blended trees

12

Programando una cámara que siga al jugador

13

Corrección del bug gráfico

14

límites del escenario, rigid bodies

15

Ejercicio: diseño de interiores

Escenarios Avanzados

16

Transiciones entre escenas

17

Mantener Player y Camera entre escenas

18

Spawning Points: programando que el jugador y la cámara aparezcan en el lugar correcto al cambiar de escena

19

Agregando Identificadores a nuestros Spawning Points para controlar mejor el flujo de nuestro juego

Enemigos Avanzados

20

Creando nuestro enemigo

21

Programando las físicas y el patrullaje del enemigo

22

Generando movimiento completamente aleatorio

23

Programando el ataque del enemigo

24

Crear Manager de Health del Player

25

Crear armas

26

Programando el ataque del Player con arma

27

Mover la espada al caminar

28

Creando el ataque con espada

29

Ejecutando el ataque con un botón

30

Movimiento en diagonal

31

Optimizando nuestro player controller

32

Ataque mejorado

33

Uso de partículas

34

Añadir el daño del enemigo en batalla

35

Programando los contadores de vida del enemigo

36

Colocando más info de UI en pantalla

37

Script de la vida

Personaje principal avanzado

38

Añadir el daño del personaje (ejercicio)

39

Sistema de puntos de experiencia para nuestro personaje principal

40

Level Up!

41

Level Up! Defensa y Reto Final del Módulo: Stats de los enemigos

42

Creando un NPC

43

Limitar el movimiento de nuestro NPC

44

Creando una pantalla de diálogos para nuestro RPG

45

El diálogo del NPC

46

Múltiples líneas de diálogo

47

Parar el NPC durante el diálogo

48

Parar el personaje durante el diálogo

Quests

49

La estructura de una quest

50

Quest 1: Ir a un lugar

51

Quest 2: Encontrar un objeto

52

Quest 3: Matar enemigos

53

Revisión de bugs

54

Mantener la cámara dentro del escenario

55

El problema al cambiar de escena

Audio

56

Agregando SFX a nuestro videojuego

57

Agregando música a nuestro videojuego

58

Ajustar volúmen del audio de cada uno de los efectos de sonido

59

Creando un VolumeManager

60

Agregando economía a nuestro juego y cierre

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Mostrando la solución del desafío e implementando transición entre blended trees

11/60
Recursos

¿Cómo realizar la transición entre blend trees en Unity?

En el fascinante mundo del desarrollo de videojuegos, las animaciones juegan un papel crucial para dotar de vida a los personajes. Un aspecto fundamental es cómo gestionar las transiciones entre diferentes estados de animación de manera suave. Aquí te mostraré cómo hacerlo a través de un enfoque práctico en Unity, utilizando variables y blend trees.

¿Qué es un blend tree?

Un blend tree es un nodo en un controlador de animaciones que fusiona múltiples animaciones basándose en parámetros. Esto permite transiciones suaves entre animaciones al cambiar entre posiciones o acciones.

Pasos a seguir:

  1. Crear blend trees:
  • El blend tree de player idle debe manejar estados como facing right, facing left, facing up y facing down.
  • Usa los parámetros last horizontal y last vertical para determinar la dirección de la mirada del personaje cuando está quieto.
  1. Eliminar animaciones redundantes:
  • Si el estado original de idle ya no es necesario, elimínalo para optimizar el grafo de animaciones.
  1. Transición entre estados:
  • Establece player idle como estado predeterminado.
  • Crea transiciones entre player idle y player movement controladas por la variable booleana walking.
  1. Configurar condiciones de transición:
  • La transición de idle a movement debe activarse cuando walking sea verdadero.
  • La transición de movement a idle se activa cuando walking es falso.
  • Asegúrate de desactivar exit time y la duración fija de las animaciones para resultados más fluidos.

¿Cómo sincronizar el controlador del jugador con Animator?

Ahora que tienes configuradas las transiciones de animación, es crucial que el controlador del jugador actualice los parámetros de Animator en tiempo real para reflejar correctamente las acciones del jugador.

Implementación en código:

// Variables necesarias
private bool walking = false;
public Vector2 lastMovement = Vector2.zero;

// Constantes para Animator
private const string lastHorizontal = "LastHorizontal";
private const string lastVertical = "LastVertical";
private const string walkingState = "WalkingState";

// En el método Update
void Update()
{
    walking = false;

    // Comprobación de movimiento
    float horizontalInput = Input.GetAxisRaw("Horizontal");
    if (Mathf.Abs(horizontalInput) > 0.5f)
    {
        walking = true;
        lastMovement = new Vector2(horizontalInput, 0);
    }

    float verticalInput = Input.GetAxisRaw("Vertical");
    if (Mathf.Abs(verticalInput) > 0.5f)
    {
        walking = true;
        lastMovement = new Vector2(0, verticalInput);
    }

    // Notificación al Animator
    animator.SetBool(walkingState, walking);
    animator.SetFloat(lastHorizontal, lastMovement.x);
    animator.SetFloat(lastVertical, lastMovement.y);
}

¿Cómo asegurar que las animaciones se vinculen correctamente?

A veces, los sprites pueden no estar asignados correctamente, lo que afecta a la animación deseada. Asegúrate de que las animaciones se vinculen adecuadamente al personaje.

Verificación:

  • Facing Up: debe estar vinculado al sprite correcto, por ejemplo, player15.
  • Facing Down: vinculado a player0.
  • Facing Left y Right: configurados respectivamente en player5 y player10.

Si notas un comportamiento inesperado, revisa y reasigna los sprites necesarios.

¿Qué aspectos considerar sobre las animaciones?

El manejo de animaciones en Unity va más allá de configurar un par de transiciones. Es un proceso integral que incluye:

  • Creación de variables y parámetros que controlan las animaciones.
  • Diseño de blend trees para transiciones suaves.
  • Comunicación continua entre el controlador del jugador y Animator.
  • Optimización y depuración de escenarios para evitar lag y errores visuales.

Ahora, con esta guía, estás listo para implementar y mejorar las animaciones de tus personajes en Unity, creando experiencias de juego más ricas y fluidas. ¡Sigue explorando y perfeccionando tus habilidades en animación!

Aportes 10

Preguntas 2

Ordenar por:

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

Para evitar que el conejo por un instante parezca que mira hacia otra direccion antes de quedarse quieto podemos poner el parámetro “Transition Duratior” de las transiciones del animator en 0.

Cuando muevo el Jugador hacia la izquierda, arriba o abajo, al final mira a la derecha antes de voltear, Tengo al Conejo Jackson? 🧟‍♂️🧟‍♂️🧟‍♂️

Aquí con los cambios agregados en esta clase:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{

    public float speed = 4.0f;
    private bool walking = false;
    public Vector2 lastMovement = Vector2.zero;

    private const string horizontal = "Horizontal";
    private const string vertical = "Vertical";
    private const string lastHorizontal = "LastHorizontal";
    private const string lastVertical = "LastVertical";
    private const string walkingState = "Walking";

    private Animator animator;

    // Start is called before the first frame update
    void Start()
    {
        animator = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {
        // s = v*t;

        walking = false;

        //Movimiento horizontal
        if(Mathf.Abs(Input.GetAxisRaw(horizontal))>0.5f){
            this.transform.Translate(new Vector3(Input.GetAxisRaw(horizontal)
            *speed*Time.deltaTime,0,0));
            walking = true;
            lastMovement = new Vector2(Input.GetAxisRaw(horizontal),0);
        }
        //Movimiento vertical
        if(Mathf.Abs(Input.GetAxisRaw(vertical))>0.5f){
            this.transform.Translate(new Vector3(0,Input.GetAxisRaw(vertical)
            *speed*Time.deltaTime,0));
            walking = true;
            lastMovement = new Vector2(0,Input.GetAxisRaw(vertical));
        }

        animator.SetFloat(horizontal, Input.GetAxisRaw(horizontal));
        animator.SetFloat(vertical, Input.GetAxisRaw(vertical));

        animator.SetBool(walkingState, walking);

        animator.SetFloat(lastHorizontal, lastMovement.x);
        animator.SetFloat(lastVertical, lastMovement.y);
    }
}

Muy importante el repasar todos estos puntos antes de seguir con las clases, puesto que son muchos parámetros en tomar en cuenta, les invito a repasar un poco y entender realmente cómo funciona.😄

IMPORTANTE !
las constantes tipo string deben asignarse de igual forma como lo asignaron en los parametros del animator del player, no me funcionaba por una espacio, revisar muy bien.


Para evitar ese flick del personaje ponga el “Transition Duratior” en 0 de las flechas.

Genial

tengo un extraño comportamiento, he seguido todo al pie de la letra, pero cuando se mueve de izquierda a derecha solo se puede ver el frame sin animacion

Mi personaje siempre queda Player_Facing_Up, a alguien le paso algo similar? Saben donde puede estar el problema?

Que profesorazo!