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

Iniciando con pociones y maná

40/53
Recursos

¿Cómo podemos gestionar la vida y el maná en un videojuego?

En el desarrollo de videojuegos, la gestión de atributos del personaje como la vida y el maná es fundamental para equilibrar el juego y mantener el interés del jugador. Implementar estos elementos requiere una cuidadosa planificación y programación para asegurar que el jugador se mantenga dentro de límites realistas y alcanzables. En esta guía, te mostramos cómo crear scripts que gestionen de forma efectiva los niveles de vida y maná en un videojuego.

¿Cómo se inicializan las variables y constantes?

La base para gestionar la vida y el maná de un personaje comienza con la declaración de variables y constantes en el script del jugador. Estas servirán tanto para rastrear el estado actual del personaje como para mantener sus valores dentro de límites predefinidos.

private int healthPoints, manaPoints;
public const int INITIAL_HEALTH = 100;
public const int INITIAL_MANA = 15;
public const int MAX_HEALTH = 200;
public const int MAX_MANA = 30;
public const int MIN_HEALTH = 10;
public const int MIN_MANA = 0;

¿Cómo se inicializan los puntos de vida y maná al inicio del juego?

En el método start del juego, los puntos de vida y maná deben establecerse a los valores iniciales definidos por las constantes.

void Start() {
    healthPoints = INITIAL_HEALTH;
    manaPoints = INITIAL_MANA;
}

¿Cómo se programan los métodos de recolección?

Para que el jugador pueda recolectar y acumular puntos de vida y maná, debemos implementar métodos específicos. Estos métodos incrementan los puntos actuales, pero aseguran no sobrepasar los límites máximos establecidos.

public void CollectHealth(int points) {
    this.healthPoints += points;
    if (this.healthPoints > MAX_HEALTH) {
        this.healthPoints = MAX_HEALTH;
    }
}

public void CollectMana(int points) {
    this.manaPoints += points;
    if (this.manaPoints > MAX_MANA) {
        this.manaPoints = MAX_MANA;
    }
}

¿Cómo se devuelven los valores actuales para la interfaz gráfica?

Es crucial para la visualización en la interfaz gráfica de usuario (GUI) que los valores actuales de vida y maná puedan ser obtenidos. Implementamos métodos que devuelven estos valores para ser representados mediante barras gráficas.

public int GetHealth() {
    return healthPoints;
}

public int GetMana() {
    return manaPoints;
}

¿Por qué es importante establecer límites en los atributos del jugador?

Establecer y respetar los límites máximos y mínimos para los atributos de un jugador es imprescindible para mantener un juego equilibrado y justo. Sin estos límites, los jugadores podrían acumular vida o maná infinitamente, lo cual desbalancearía la dificultad y sacaría al juego de su propósito original. Esto asegura que todos los jugadores jueguen bajo las mismas condiciones y desafíos.

Consejos prácticos para implementaciones adicionales

  • Validaciones constantes: asegura que el juego verifique constantemente los límites de los puntos de vida y maná.
  • Visualización atractiva: usa gráficos visuales como barras dinámicas para representar estos valores, logrando una experiencia usuario más inmersiva.
  • Pruebas de carga: realiza pruebas intensivas para asegurar que los valores de las constantes equilibran adecuadamente la experiencia de juego.

Con estas directrices, puedes crear un sistema robusto y equilibrado que ofrezca una experiencia de juego desafiante y satisfactoria. Además, fomenta a los jugadores a gestionar estratégicamente sus recursos, añadiendo profundidad al juego. ¡Sigue explorando y mejorando tus habilidades de scripting en videojuegos!

Aportes 10

Preguntas 1

Ordenar por:

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

¿Qué es o para qué sirve la barra de maná? Nunca la había escuchado 😅.

Al fin logre subir un gif

this.manaPoints = this.manaPoints >= MAX_MANA 
            ? MAX_MANA : this.manaPoints + points;

Yo prefiero hacerlo así:

    public void CollectMana(int points)
    {
        int totalPoints = manaPoints + points;

        if (totalPoints >= MAX_HEALTH)
        {
            manaPoints = MAX_HEALTH;
        }
        else
        {
            manaPoints = totalPoints;
        }
    }

Así siempre me aseguro que el valor que se asigne no sea mayor al máximo permitido y no sumo 2 veces el valor para hacer la comparación y asignarlo.

CollectMana ![](

quien mas esta aqui por el dia de platzi?
#PLATZIDAY

Yo hice lo siguiente tratando de hacer un código más manejable:

Creé una clase en el GameManager para poder guardar los valores máximo, mínimo e inicial tanto del maná como de la vida:

public class Stat
{
    public readonly int initial, max, min;
    public Stat(int initial, int max, int min)
    {
        this.initial = initial;
        this.max = max;
        this.min = min;
    }
}

Quedaría así al momento de usarlos en el PlayerController:

    public Stat healthStat = new Stat(100, 200, 10);
    public Stat manaStat = new Stat(15, 30, 0);

Luego creé una función que sirva como base para aumentar los puntos a cualquier collectable, recibe los datos y regresa los nuevos puntos, si es que cambiaron

    public int CollectPoints(int points,int current, Stat stat)
    {
        int newPoints = current + points;
        if (newPoints > stat.max) return current;
        return newPoints;
    }

    public void CollectHealth(int points) => healthPoints = CollectPoints(points, healthPoints, healthStat);
    

    public void CollectMana(int points) => manaPoints = CollectPoints(points, manaPoints, manaStat);

2021 ❤️

De maravilla.🤩

Excelente!!