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

La lógica del maná

44/53
Recursos

Aportes 19

Preguntas 1

Ordenar por:

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

Muy buen curso! Se recomienda ver el curso de programación básica o saber algoritmos básicos antes de incursionar en módulos mas avanzados de programación como este, para evitar la confusión.

Si presentan el problema de agregar el superjump al input manager y este no reacciona, deben fijarse que en los select del final (type, axix, joy num) tengan estos valores:

Type: Key or Mouse Button
Axis: X axis
Joy Num: Get Motion from all Joy

Esto hace que se detecten los botones del teclado y mouse.

Yo utilice la mana para hacer que el personaje pudiera ir a mayor velocidad apretando Shift Izquierdo, siempre y cuando el mana sea mayor a cero.

En las ultimas instancias se convierte en confusión absoluta lograr entender la lógica y las explicaciones del profesor. 😦

hice una mecanica de corren y para la gestion de mana

Algo que tuve que hacer fue limitar el máximo en el eje “Y” a cierto valor dado que, al contar en mi versión con plataformas que te dan un rebote, permitían al jugador saltar infinitamente y salir de la cámara sin ninguna referencia. La solución que aplique fue colocar una variable de “MAX_Y_POSITION” y luego ponerle un máximo con la siguiente línea de codigo:

public float
MAX_Y_POSITION;

if (this.transform.position.y >= MAX_Y_POSITION)
{
playerRigidBody.position = new Vector2(transform.position.x, MAX_Y_POSITION);
}

Esta solución podría ser cambiada en los niveles con las diferentes opciones de “collider2d” con las que contamos sin embargo si deseamos cambiar la altura a todo el juego tendríamos que cambiar los prefabs o límites uno por uno y con esa línea de codigo lo que ahorramos en tiempo de diseño de niveles es bastante 😄

Lo que hice yo fue permitir un doble salto dependiendo del mana

    void Jump() {
        //jump is a impulse force :D
        if (IsTouchingFloor() && isInGame) {
            rigidBody.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
        } else if (!IsTouchingFloor() && isInGame && manaPoints > SUPERJUMP_COST) {
            rigidBody.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
            manaPoints -= SUPERJUMP_COST;
        }
    }
 

El codigo tiene un error que no se noto porque usaste dos botones distintos, pero te das cuenta si tocas los dos al mismo tiempo, que aunque no tengas mana va a saltar el doble. Para solucionar este problema tenes que poner un else entre la condicion del supersalto y la del salto normal.


https://imgur.com/gallery/02kzNgv

Avances hasta el momento:

  • Mana recarga de manera automatica un punto cada 2.5 seg
  • Deja un rastro de polvo cuando salta y cuando hace la habilidad de mana
  • Cambie el supersalto, por un ataque frontal
  • Agregado el menu principal (pantalla de muerte esta implementada pero sin mostrar aun)

para practicar también hice un sistema de daño

El cáculo de jumpForceFactor mejor colocarlo dentro del ámbito de la condición IsTouchingTheGround().
Por cierto, IsTouchingTheGround se puede llegar a calcular dos veces en el método Update. Mejor refactorizar la dupla Update()<->Jump().

Hola que tal saben porque se duplica el valor SUPERJUMP_COST?

Superjump![](

Para crear y configurar un nuevo botón de entrada (así como el Jump, SuperJump, Fire, etc) entramos a Edit > Project Settings > Input y aumentamos la cantidad de entradas con la opción Size.

Para abrir la pestaña de animaciones entramos a Window > Animation > Animation.

El super salto debe ejecutarse solo si está tocando el suelo y el estado del juego es inGame

<    void Jump (bool superJump) 
    {
        if (IsTouchingTheGround() && GameManager.sharedInstance.currentGameState == GameState.inGame)
        {
            float jumpForceFactor = jumpForce;
            if(superJump) {
                manaPoints -= SUPERJUMP_COST;
                jumpForceFactor = jumpForce*SUPERJUMP_FORCE;
            }
            rb.AddForce(Vector2.up * jumpForceFactor, ForceMode2D.Impulse);
            
        }
    }>

Muy útil la clase

Muchas gracias al profesor al agregar esa lógica de añadir una variable la cual se modifica según el estado del condicional, me parece un razonamiento que puede ayudar a solucionar varios tipos de problemas que conllevan en repetición de código.