Índice de contenido
En Unreal Engine 5, tengo un sistema en el que cuando mi jugador recibe un 75% de daño, se reproduce un sonido de alerta. Sin embargo, también cuento con ciertos cristales que restauran su vida, y cuando el jugador los toca, ese sonido ya no debe seguir sonando, pues solo tiene sentido reproducirlo mientras el jugador está por debajo del 25% de vida restante.
El reto está en hacer que ese audio en bucle se pueda detener de forma confiable desde Blueprint, y eso no es tan sencillo como parece a primera vista.
Problemas al Usar Spawn Sound 2D con Looping
La primera aproximación natural es importar el archivo de sonido (.wav o .ogg), abrir el Sound Wave en el editor y activar la propiedad Looping directamente desde el panel de detalles. Con eso hecho, podríamos usar el nodo Spawn Sound 2D en Blueprint, que devuelve una referencia al Audio Component generado y, en teoría, nos permite iniciarlo o detenerlo a voluntad:

El problema es que, cuando el sonido está configurado en bucle, llamar a Stop sobre la referencia devuelta por Spawn Sound 2D no siempre funciona correctamente. En mi caso, prácticamente nunca lo detuvo. Por ejemplo, al tocar el cristal para recuperar vida, esperaba que el sonido de alerta de bajo HP se cortara de inmediato, pero el audio seguía reproduciéndose sin parar. Este es un comportamiento conocido con sonidos en bucle creados dinámicamente con este nodo: la referencia devuelta puede quedar huérfana o simplemente ignorar la llamada al método Stop.
Solución: Usar un Audio Component en el Personaje
La solución más robusta y limpia es añadir un Audio Component directamente al Blueprint del jugador como un componente fijo, en lugar de generarlo de forma dinámica. El proceso es el siguiente:
- En el Blueprint del personaje, ve al panel de componentes, busca
Audioy agrégalo. Ese componente vivirá durante toda la vida del actor, lo que nos garantiza una referencia estable en todo momento. - Con el componente seleccionado, asígnale el
Sound WaveoSound Cueque deseas reproducir, y activa la propiedadLoopingdesde sus detalles. Esto le indica al componente que debe repetir el audio indefinidamente una vez iniciado.
Desde Blueprint, en lugar de usar el problemático nodo Spawn Sound 2D, simplemente arrastras la referencia del Audio Component desde el panel de componentes y llamas a sus métodos directamente: usa Play cuando el jugador baje del umbral de vida y necesites iniciar el sonido, y Stop cuando el jugador recupere vida y debas silenciarlo. Como la referencia siempre apunta al mismo componente, el método Stop funciona de forma confiable en todo momento.

También puedes usar el nodo Set Paused del Audio Component si lo que quieres es pausar el audio y luego reanudarlo desde el mismo punto, sin reiniciar la reproducción desde el principio. Esto es útil, por ejemplo, si el jugador entra en un menú de pausa y no quieres que el sonido de alerta se corte bruscamente y vuelva a empezar desde cero.
Detalle Importante: Desactivar Auto Activate
Un punto crítico que no debes pasar por alto: asegúrate de desactivar la propiedad Auto Activate en los detalles del Audio Component. Si la dejas activa, el sonido comenzará a reproducirse en cuanto el actor aparezca en el mundo, independientemente de la lógica de tu Blueprint. En mi caso, el comportamiento correcto es que el audio solo arranque de forma programática cuando el jugador recibe suficiente daño, así que desactivar Auto Activate es indispensable para que el sistema funcione como se espera.