Las piezas del audio#
- AudioClip: el archivo de sonido (un
.wav,.mp3,.oggen tu proyecto). - AudioSource: el "altavoz". El componente que reproduce un clip. Va en un GameObject.
- AudioListener: el "oído". Normalmente está en la cámara principal; capta lo que suena. Solo debe haber uno activo.
Música de fondo#
Para música, un AudioSource con Loop y Play On Awake marcados, y su clip asignado. No hace falta código: empieza sola y se repite.
Efectos de sonido por código#
Para efectos puntuales (disparo, salto, moneda) usa PlayOneShot, que permite superponer varios sonidos sin cortar el anterior:
using UnityEngine;
[RequireComponent(typeof(AudioSource))]
public class SonidosJugador : MonoBehaviour
{
[SerializeField] private AudioClip sonidoSalto;
[SerializeField] private AudioClip sonidoMoneda;
private AudioSource audioSource;
void Awake() => audioSource = GetComponent<AudioSource>();
public void Saltar() => audioSource.PlayOneShot(sonidoSalto, 0.8f); // 0.8 = volumen
public void Moneda() => audioSource.PlayOneShot(sonidoMoneda);
}audioSource.Play() reproduce el clip asignado y corta cualquier sonido anterior de esa fuente. PlayOneShot(clip) reproduce un clip encima, sin cortar. Para efectos que pueden solaparse (varios disparos seguidos), usa PlayOneShot.
Audio espacial: 2D vs 3D#
El parámetro Spatial Blend del AudioSource decide si el sonido es plano o posicional:
- 2D (Spatial Blend = 0): suena igual estés donde estés (música, UI).
- 3D (Spatial Blend = 1): suena según la posición y distancia (los pasos de un enemigo, una cascada). Se oye más fuerte al acercarte y con paneo izquierda/derecha.
Con Spatial Blend en 3D, ajusta la curva de atenuación (Volume Rolloff) y las distancias Min/Max: definen desde dónde empieza a bajar el volumen y a qué distancia deja de oírse. Un rolloff logarítmico suele sonar más natural.
El Audio Mixer: control profesional#
Para controlar volúmenes por categorías (Música, Efectos, Voces) y añadir efectos (reverb, eco), usa un Audio Mixer (Assets → Create → Audio Mixer). Creas grupos y enrutas cada AudioSource a su grupo (campo Output del AudioSource).
Cambiar el volumen de un grupo desde un slider de opciones:
using UnityEngine;
using UnityEngine.Audio;
public class Opciones : MonoBehaviour
{
[SerializeField] private AudioMixer mixer;
// El slider da 0..1; el mixer trabaja en decibelios (escala logarítmica)
public void CambiarVolumenMusica(float valor)
{
float db = Mathf.Log10(Mathf.Clamp(valor, 0.0001f, 1f)) * 20f;
mixer.SetFloat("VolMusica", db); // "VolMusica" = parámetro expuesto en el mixer
}
}Un slider da 0–1, pero el mixer usa decibelios (una escala logarítmica). Poner el parámetro directamente a 0–1 suena mal. Convierte con Mathf.Log10(valor) * 20. Y recuerda exponer el parámetro de volumen en el mixer (clic derecho sobre el volumen → Expose) y renombrarlo.
Rendimiento#
Si disparas cientos de efectos por segundo, crear un AudioSource por cada uno es caro. Reutiliza una o varias fuentes con PlayOneShot, o aplica object pooling a las fuentes de audio. Además, para clips cortos usa Decompress On Load; para música larga, Streaming.
Errores frecuentes#
- Tener varios AudioListener activos (Unity avisa; deja solo el de la cámara).
- Usar
Play()donde queríasPlayOneShoty cortar sonidos. - Poner el volumen del mixer en 0–1 en vez de decibelios.
- Esperar sonido 3D con Spatial Blend en 2D.
- Olvidar exponer el parámetro del mixer antes de usar
SetFloat.
Ponte a prueba#
Resumen#
Un AudioSource reproduce un AudioClip, captado por el único AudioListener (en la cámara). Usa Loop+Play On Awake para música y PlayOneShot para efectos que se solapan. Spatial Blend decide si el sonido es 2D (plano) o 3D (posicional). Para volúmenes por categoría y efectos, un Audio Mixer (recordando que trabaja en decibelios). Para muchos sonidos, reutiliza fuentes o aplica pooling.