Sumar efectos de sonido en Unity da vida inmediata al juego: golpes, explosiones y ataques se sienten reales y coherentes. Aquí verás, paso a paso y sin complicaciones, cómo importar audios, configurarlos con Audio Source y dispararlos de dos formas: al instanciar un GameObject o mediante un SFX Manager centralizado por código.
¿Cómo importar y preparar audio en Unity?
Importa los archivos desde los recursos y arrástralos a la carpeta Audio dentro de Assets. Unity los detectará como clips y mostrará una forma de onda, lo que ayuda a identificar silencios iniciales o finales. Si hay silencio indeseado, edítalo con herramientas gratuitas como Audacity.
Arrastra todos los audios a Assets/Audio.
Verifica la forma de onda para detectar silencios.
Opcional: edita silencios con Audacity antes de usarlos.
¿Qué ajustes de Audio Source conviene revisar?
Configura un Audio Source en cada objeto que deba sonar.
Audio Clip: asigna el clip correcto, por ejemplo, enemy explosion.
Play On Awake: desactívalo si no quieres que suene al iniciar.
Loop: solo si el clip debe repetirse.
Volume y Pitch: ajusta para coherencia con la escena.
¿Cómo reproducir efectos al instanciar un GameObject?
La forma más directa es añadir un Audio Source al prefab que se instancia y asignar el Audio Clip correspondiente. Ejemplo: el prefab blood burst (salpicadura de sangre) puede reproducir el sonido enemy explosion cada vez que aparece en pantalla.
Abre el prefab blood burst.
Añade componente Audio Source y asigna el clip enemy explosion.
Activa Play On Awake si debe sonar al aparecer.
Ajusta volumen y pitch para integrarlo con la escena.
Resultado: cada vez que se instancia el efecto visual de sangre, suena el grito del enemigo de forma automática y consistente.
¿Cómo centralizar sonidos con un SFX Manager por código?
Algunas veces conviene disparar sonidos desde los scripts. Para eso, crea un SFX Manager que mantenga referencias a los Audio Source y los reproduzca cuando otros scripts lo soliciten.
Crea un GameObject vacío: SFX Manager.
Añade el script SFXManager.
Arrastra a la escena tres GameObjects con Audio Source: player attack, player hurt, player death.
Importante: desactiva Play On Awake en los tres.
Ahora sí, hazlos hijos del SFX Manager para mantener orden.
Añade al SFX Manager el Don't Destroy On Load para que persista entre escenas.
En el inspector del SFX Manager, asigna cada referencia pública a su Audio Source correspondiente.
Ejemplo de script SFXManager con referencias públicas:
¿Cómo reproducir el ataque del jugador con código?
Integra el SFX Manager con el controlador del jugador para sonar al atacar. Usa FindObjectOfType<SFXManager>() en Start y reproduce el clip en el input del ataque con Input.GetMouseButtonDown(0).
usingUnityEngine;publicclassPlayerController:MonoBehaviour{privateSFXManager sfxManager;voidStart(){ sfxManager =FindObjectOfType<SFXManager>();}voidUpdate(){if(Input.GetMouseButtonDown(0)){// Aquí ya haces tu animación de ataque. sfxManager.playerAttack.Play();}}}
Claves técnicas a interiorizar:
Usa un único manager para evitar duplicados y mantener coherencia entre escenas.
FindObjectOfType<SFXManager>() funciona porque solo hay un SFX Manager activo.
Evita lógica en Start/Update del SFX Manager: su papel es guardar referencias.
Combina efectos: ataque del jugador con la explosión del enemigo para reforzar feedback.
Ideas para continuar y practicar:
Dispara player hurt cuando el jugador reciba daño.
Reproduce player death en el evento de muerte del personaje.
Añade música de fondo y cambia a otra pista al entrar en la casa o volver al bosque.
¿Quieres que revise tu integración de Audio Source y SFX Manager o que te sugiera cómo organizar los sonidos por categoría? Cuéntame en comentarios qué efectos te falta conectar y en qué script lo harías.
hola martin! en los archivos que te dan al inicio del curso, si no avísame
¡Hola, Martin! ⚡
Todo el material para el curso lo encuentras en esta clase. De todas formas, aquí te dejo el enlace a la carpeta del repositorio donde están los audios. :)
Genial
Cuando configuro el sonido del efecto de la sangre con el check de Play On Awake en true suena a penas comienza el juego, en la etiqueta de descripción me dice que se reproduce cuando la escena carga. ¿Como lo puedo solucionar, no veo una opción que me funcione y si lo dejo en false no suena al instanciarse?
Hice exactamente lo mismo de la clase, pero cuando inicio el juego el sonido del player atacando se reproduce una vez en volumen muy alto (aunque yo lo configuré más bajo y luego en el juego al atacar se escuche mas bajo).
Por que podría llegar a ser? El tilde “on awake” del audio source está desactivado.
Note que el conejo aparece mirando hacia arriba e inmediatamente cambia hacia abajo. Tal vez esté ejecutando rapidamente la animación de atacar?
Intente en el Awake() setear el attacking = false o incluso la animación pero no he conseguido ningun resultado.
Espero su ayuda. Gracias..
Ya lo resolví. Basicamente el profesor en un momento arrastra los audios a la Hierarchy pero NO a la escena. Si lo arrastran a la escena ademas de no crear el gameObject, se agrega como componente de audio en el grid. Con lo que se camufla el audio source ahi y suena siempre cuando inicia.