Sigo con el sonido, después de ver la
teoría, vamos a ver cómo lo uso en el juego. Intenté hacerlo todo
con snapshots y transiciones entre ellas. No es mala idea pero no
funciona por usar este sistema para intentar crear animaciones de
sonido.
Voy a comenzar por explicar los efectos
que quiero conseguir y después voy a explicar los intentos de
conseguirlo. Lo que quiero es:
- Poder controlar (incluso dar la opción al usuario en la configuración) el volumen de música y efectos de juego (espada, curación, quejidos...) por separado.
- Poder cortar el volumen de todo el sonido del juego cuando suene una interrupción, que se note también que se interrumpe el sonido normal del juego con esa interferencia.
- Un efecto de corte de frecuencias altas en el menú de pausa.
- Poder poner un efecto de reberveración y eco ajustable a todos los sonidos y bajar el pitch de la música según el estado de salud del personaje.
- Que la transición entre estados del personaje sea suave.
En el group de reverberación recibo
los sonidos que me quieran mandar en lo alto de la pila, después
viene la atenuación (así puedo controlar el volumen del eco) y
después vienen los efectos de reverberación y eco. Lo que recibe
este canal son la salida de los canales de música y efectos.
Cuando hablo de transiciones entre
estados, no solo quiero poder hacer una transición cuando cambie el
estado, sino que el sonido esté constantemente cambiando entre los 2
extremos del estado en el que estemos, para conseguir un efecto de
cambio constante, al igual que haré con los efectos gráficos.
Espero conseguir un efecto parecido a cuando estamos mareados, que no
es algo constante sino que a veces se nos va más la cabeza, como si
el mareo se fuera haciendo más fuerte en algunos momentos. Así pues
si tenemos la vida al 66%, el sonido iría alternando entre los
efectos para el 75% y 50%. Por lo que necesito 5 estados de sonido:
0, 25, 50, 75 y 100 para cubrir los 4 estados de salud que tiene el
juego.
Lo del menú de pausa con el corte de
altas frecuencias lo hacen en el tutorial de Unity y me parece muy
buena idea. No quitas el sonido al juego (al estar pausado
seguramente no haya efectos de sonido al no moverse nada), y la
música se sigue oyendo, pero como si hubieras cerrado una puerta,
que no es solo una reducción de sonido, sino que los agudos
desaparecen, los medios casi también y solo se escucha un poco de
los bajos, parecido a estar fuera de una discoteca. Me pareció buen
efecto para el menú de pausa, donde sigues en el juego pero no
jugando, es como cerrar una puerta al juego, pero no te has ido de
esa casa. Este efecto lo coloco en el master, y no me hace falta usar
send y recieve ya que va a afectar a todos los sonidos.
Todo esto lo quería hacer con
snapshots. Tendría una para cada estado sonoro (100, 75, 50...) y
otras dos para los casos de interrupción y pausa. En cada snapshot
están los valores que necesito: volumen, pitch, nivel de send a eco,
el recorte por frecuencias, etc. La idea es hacer transiciones largas
(10 segundos) entre los dos extremos del estado de salud (entre 100 y
75 por ejemplo) y transiciones rápidas (de 0.1 segundos por ejemplo)
para pasar a los snapshots de interrupción o pausa.
El problema es que no funciona. Bueno,
funciona, pero raro. Porque los snapshots cambian todos los
parámetros. Entonces al hacer una interrupción, a lo mejo el pitch
estaba a 92 (un valor entre 90 y 100 es normal cuando estamos entre
los snapshots de 100 y 75), al ir a Interrupción se pone al 100,
pero es normal en la interrupción, el problema es al volver de la
interrupción, tengo que volver a 100 o a 75, en cuyo caso sería
poner un pitch de 90 o 100, si paso de 92 a 100 de forma inmediata,
aunque sea con una interrupción de por medio se nota mucho el cambio
de tono. Y si no cambio rápido de interrupción a normal, sino que
voy lento para que no se note esa transición el volumen también irá
lento y tardaré 10 segundos en volver a subir el volumen,
inaceptable.
Así que he cambiado un poco la forma
de plantearlo, he dejado los snapshots solo para los estados de juego
normal (100, 75, 50...) y los de interrupción y pausa ya no lo hago
como snapshot, sino desde código, exponiendo ciertos parámetros. En
un mixer se pueden exponer ciertos valores, de los groups, efectos,
de lo que sea, tenemos que exponer el parámetro explícitamente y
darle un nombre, de forma muy parecida a como se hace en Mecanim. Pero
tenemos que tener en cuenta que una vez que modificamos un parámetro
expuesto por código, deja de formar parte del snapshot y ya no hará
caso a los cambios de snapshot (hasta que lo liberemos).
Así que expongo 4 parámetros, por un
lado el volumen de los canales de música, fx y reverb. Y el cuarto
es el nivel de corte del filtro de paso bajo. Así cuando hay una
interrupción paso el volumen de los 3 primeros de 0db (volumen “a
tope”) a -80 db (silenciado). Y a la inversa cuando la interrupción
acaba. De normal la frecuencia de corte del filtro de paso bajo es de
22000 HZ (es decir no corta nada que oigamos los humanos), y al
pausar, cambio por código ese valor a 250 HZ, con lo que se corta
todo sonido más agudo que esa frecuencia.
De esta forma cuando vamos a una
interrupción, la transición entre estados sigue su curso y al
volver de la interrupción estamos en los mismos valores o muy
cercanos de antes de irnos y no notamos nada raro.
No hay comentarios :
Publicar un comentario