video tutorial generar sonidos unity videojuegos
02
marzo
2022

Son muchas las ocasiones en las que a la hora de desarrollar un videojuego puede darse la situación en la que tenemos que simular el sonido de un elemento de juego que emite un sonido que debe variar en función de ciertos aspectos.

Si estás interesado en ampliar tus conocimientos en lo relacionado a diseño y desarrollo de videojuegos visita nuestros cursos de Unity 3D y videojuegos

Este sería el caso típico de un juego de carreras en el que necesitamos simular el sonido del motor virtual de nuestro vehículo según aceleramos o frenamos. Para este fin necesitamos generar un sonido dinámico, y para conseguirlo vamos a valernos de los siguientes elementos:

Paleta de sonidos.

Esto es un conjunto de sonidos que tomamos como base para componer un sonido más complejo. Para el sonido de un motor podemos emplear los siguientes sonidos:

  • Un sonido de “lento” que represente nuestro motor virtual cuando la velocidad es baja.
  • Un sonido de “rápido” que represente nuestro motor virtual cuando la velocidad es alta.
  • Un sonido de “viento” que represente el aire al desplazarnos a gran velocidad.

Todos los sonidos deben prepararse con un volumen normalizado de modo que puedan reproducirse en bucle y escucharse con la misma fuerza.

Modulación

Esto es modificar las características de los sonidos anteriores en función de un valor para conseguir el sonido dinámico que estamos buscando.

Unity posee filtros y efectos aplicables a sonidos tales como reverberación (Reverb), transición entre canales (Stereo Pan), espacialización (Spatial Blend), así como efectos asociados al movimiento como la propagación (Spread) o el efecto Doopler.

En este ejemplo sin embargo vamos a modificar únicamente dos características de los sonidos:

  • Volume ➜ Determina la intensidad del sonido con la que un sonido se oye mediante un valor decimal comprendido entre 0 y 1, tal que 0 sería silencio, 1 es el volumen original, y 0.5 es un volumen intermedio.
  • Pitch ➜ Determina la frecuencia de reproducción del sonido mediante un valor porcentual tal que 0.5 reproduce el sonido a la mitad de velocidad y 2.0 al doble.

La variación del volumen marca el protagonismo de un sonido al hacer que destaque más o menos sobre el resto. Un volumen demasiado bajo hará que apenas se oiga e incluso desaparezca entre sonidos con mayor volumen. Un volumen demasiado alto puede producir que distorsione e incluso se torne molesto ocultando al resto de sonidos.

La variación en la frecuencia afecta al carácter del sonido. Con valores menores el sonido se vuelve más grave y apagado perdiendo claridad. Con valores mayores el sonido se torna más agudo y estridente.

Generar sonidos dinámicos en Unity 1
Ajustes de volumen y pitch en componente AudioSource

El Script de Control de Audio

Para generar el sonido que necesitamos creamos un script al que llamaremos “AudioEngineControl”. Este debe permitir definir las variaciones de volumen y frecuencia para cada uno de los sonidos de la paleta en función de un valor que tomaremos como la velocidad del GameObject que llamaremos “Turbine”:

Generar sonidos dinámicos en Unity 2

El script consta de 6 propiedades AnimationCurve que permiten definir las curvas de control desde el editor de Unity, otras 3 propiedades AudioSource que representan orígenes de los tres sonidos empleados como paleta, y una propiedad Factor que representa un valor decimal que representa el factor de velocidad del vehículo dentro del rango 0.0 – 1.0.

El código de las propiedades del Script sería el siguiente:

Generar sonidos dinámicos en Unity 3

Para calcular el volumen y velocidad de reproducción de los sonidos en función del valor de la propiedad Factor debemos emplear el método Evaluate() de los objetos AnimationCurve. Este método devuelve para cada valor de la propiedad Factor, el valor correspondiente al volumen o velocidad de cada uno de los sonidos según la curva definida en el editor de Unity.

Generar sonidos dinámicos en Unity 4

Ajuste de Curvas

Una vez creado el script debemos configurar las curvas de las propiedades correspondientes al volumen y velocidad de los tres sonidos empleando el editor de Unity. Para ello las gráficas siguen el siguiente esquema:

  • El eje horizontal representa el valor de la propiedad Factor.
  • El eje vertical representa el valor devuelto por el método Evaluate().

Generar sonidos dinámicos en Unity 5

Para crear la curva disponemos el valor máximo y mínimo en los extremos empleando las presets situadas en la parte inferior. A continuación, podemos mover horizontal y verticalmente los puntos de control situados en los extremos de la curva.

Si estás interesado en ampliar tus conocimientos en lo relacionado a diseño y desarrollo de videojuegos visita el Curso Unity 3D de CIPSA

También es posible añadir más puntos y modificar la forma de la girando los modificadores situados a ambos lados de cada punto de control:

Generar sonidos dinámicos en Unity 6

Ajuste de frecuencias ( Pitch )

El ajuste de frecuencia nos permite alterar el carácter de los sonidos en función de la velocidad.

  • La frecuencia del sonido de motor lento debe aumentar en función de la velocidad, por lo que definimos una curva creciente.

Generar sonidos dinámicos en Unity 7

La forma de la curva hace que la frecuencia aumente más rápidamente al principio y menos según alcanzamos la velocidad máxima. Esto es importante dado que al ser el sonido “lento” es el primero en oírse y el que debe mostrar con mayor notoriedad la aceleración inicial.

  • La frecuencia del sonido de motor rápido también debe aumentar con la velocidad por lo que aplicamos una curva igualmente creciente.

Generar sonidos dinámicos en Unity 8

En este caso la gráfica tiene una curvatura inversa a la anterior de modo que el sonido se acelera menos al principio y más al aproximarse a la velocidad límite para conseguir un efecto más extremo.

Ajuste de volúmenes

El ajuste de los volúmenes determina el sonido predominante en cada momento y establece la transición entre ambos al acelerar y decelerar.

  • El volumen del sonido lento debe ir decreciendo según la velocidad aumenta para ir perdiendo notoriedad en favor del sonido rápido:

Generar sonidos dinámicos en Unity 9

  • El volumen del sonido rápido por el contrario debe ir aumentan con la velocidad para ir haciéndose más notorio y reemplazar al sonido del motor lento:

Generar sonidos dinámicos en Unity 10

  • El volumen del sonido del viento debe igualmente aumentar con la velocidad, aunque de forma más paulatina para ser menos aparente y no ocultar el sonido del motor:

Generar sonidos dinámicos en Unity 11

Aprende a utilizar el motor de juegos Unity a tu propio ritmo con el Curso Programador de Videojuegos

Author

Ángel Aguinaga

Profesor de Programación y Bases de Datos de la Sede Bilbao. Formador experimentado en áreas como .Net, Java, BB.DD., Python, Desarrollo y programación Web.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Recibe de primero nuestras ofertas de empleo y noticias