Efectos Visuales de Daño en Unity: Parpadeo y Color de Texto

Clase 38 de 60Curso Avanzado de Creación de RPGs con Unity

Resumen

¿Cómo implementar el daño en ambos sentidos?

Al desarrollar un videojuego, es crucial representar claramente el daño recibido por el personaje tanto por parte del jugador como del enemigo. Esto no solo mejora la inmersión del jugador, sino que también mejora la jugabilidad y comprensión de la situación del juego. En Unity, logramos esto mediante la reutilización del script de daño que aplicamos al enemigo y adaptándolo para representar el daño recibido por el jugador. Esto se logra sin necesidad de alterar la referencia de emisor o receptor del daño.

¿Cómo adaptamos los scripts en Unity?

Para representar correctamente el daño, podemos reutilizar el script damagePlayer. Este script no solo maneja el daño infligido al enemigo, sino que ahora también incorpora:

  • GameObject DamageNumber: se asigna y se instanciará desde el editor de Unity para mostrar gráficamente el daño recibido.

  • Posicionamiento del daño: se utiliza collision.gameObject.transform.position para mostrar el daño en la posición exacta donde el personaje lo recibe.

    var clone = (GameObject)Instantiate(damageNumber, collision.gameObject.transform.position, Quaternion.Euler(Vector3.zero)); clone.GetComponent<DamageNumber>().damagePoints = damage;

El código anterior ayuda a visualmente mostrar el daño en pantalla, igual que cómo se representaría el daño que el jugador inflige al enemigo.

¿Cómo diferenciamos el daño del jugador del enemigo?

Una vez que el daño se muestra en pantalla, el siguiente desafío es diferenciar visualmente si el daño procede del enemigo o es causado por el jugador. Esto se logra mediante una mejora visual: hacer que el personaje "parpadee" cuando recibe daño.

Implementación del efecto de parpadeo

Para añadir este efecto, implementamos lo siguiente:

  • Variables para el efecto flash:

  • flashActive: indica si el personaje está en modo parpadeo.

  • flashLength: define la duración del parpadeo.

  • flashCounter: controla el tiempo interno del parpadeo.

  • Método toggleColor: cambia entre visible e invisible al personaje dependiendo del valor booleano pasado al método.

    private void ToggleColor(bool visible) { characterRenderer.color = new Color(characterRenderer.color.r, characterRenderer.color.g, characterRenderer.color.b, visible ? 1.0f : 0.0f); }

Lógica del parpadeo en el método Update

La lógica del parpadeo se lleva a cabo dividiendo la animación en tercios, lo que permite alternar entre visible e invisible varias veces durante un ciclo de daño:

if (flashActive)
{
    flashCounter -= Time.deltaTime;
    if (flashCounter > flashLength * 0.66f)
    {
        ToggleColor(false);
    }
    else if (flashCounter > flashLength * 0.33f)
    {
        ToggleColor(true);
    }
    else if (flashCounter > 0f)
    {
        ToggleColor(false);
    }
    else
    {
        ToggleColor(true);
        flashActive = false;
    }
}

¿Qué más podemos hacer para mejorar la experiencia visual?

Aparte del parpadeo, ajustar el color del texto que muestra el daño es otra forma efectiva de diferenciar el daño. Cambiar el color del texto es una tarea sencilla que puedes probar. Este ejercicio no solo te ayudará a comprender mejor la mecánica de efectos visuales en Unity, sino que también te preparará para enfrentar nuevos desafíos en el desarrollo de videojuegos.

En resumen, la implementación de efectos visuales de daño, como el parpadeo, no solo agrega una capa de complejidad y realismo al juego, sino que también enriquece la experiencia del jugador. Así que, ¡motívate a seguir explorando y aprendiendo!