Utilizando o Mixer da Unity
![Utilizando o Mixer da Unity](https://www.alura.com.br/artigos/assets/uploads/2018/07/table-1284507_1920.jpg)
![Imagem de destaque #cover](assets/uploads/2018/07/table-1284507_1920.jpg)
Em jogos, é comum termos sempre muitos arquivos de áudio sendo executados ao mesmo tempo,alguns deles são efeitos sonoros (passos, ataques, inimigos, ambiente, etc…), já outros compõem a trilha sonora.
Com tantos objetos de áudio dentro de uma cena, como controlamos o volume do jogo de forma centralizada? Pense em uma tela de configurações onde temos dois sliders, um para controlar o volume da música do jogo e outro para ajustar os efeitos sonoros.
![](https://www.alura.com.br/artigos/assets/uploads/2018/07/image_0-3.png)
Para executarmos um arquivo de áudio dentro de uma cena na Unity, precisamos de algum objeto com o componente Audio Source. E cada componente desses tem seu próprio controle de volume.
![](https://www.alura.com.br/artigos/assets/uploads/2018/07/image_1-3.png)
![Banner da Escola de Programação: Matricula-se na escola de Programação. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!](assets/alura-matricula-maior-escola-tecnologia-brasil-mais-500-mil-estudantes/matricula-escola-programacao-alura-saiba-mais-versao-mobile.png)
Se cada Audio source tem seu próprio volume, será que precisamos manter uma lista de todos esses componentes para que, quando quisermos mudar o volume da música, mudarmos todos ao mesmo tempo?
Pensando nesse caso da música, temos outro problema para resolver. Há dois grandes grupos de arquivos. Os que fazem parte da música e os que são efeitos sonoros. Como controlamos cada grupo separadamente?
Pensando nesses problemas que a Unity criou o próprio áudio mixer dentro da engine. Estes mixers nos ajudam a agrupar os componentes de áudio e aplicar efeitos a todos eles de uma só vez, como um painel de controle.
Se abrirmos a janela Audio Mixer, podemos criar quantos mixers quisermos clicando no "+" ao lado da palavra “mixers”.
![](https://www.alura.com.br/artigos/assets/uploads/2018/07/image_2-3.png)
Todo novo mixer que criamos vem com um grupo chamado master, onde podemos adicionar efeitos e alterar o volume de todo áudio que passar por esse grupo.
Além do grupo master, podemos criar outros clicando no botão "+" ao lado da palavra “Groups”. Como o próprio nome indica, com esses grupos podemos agrupar os áudios e aplicar efeitos diretamente em um desses grupos.
![](https://www.alura.com.br/artigos/assets/uploads/2018/07/image_3-1.png)
Como fazemos para que um Audio Source faça parte de um desses grupos?
Todo Audio Source possui uma propriedade chamada saída - Output - e ela controla por qual grupo o áudio deve passar antes de ser executado. Quando o som passa por esses grupos, ele recebe todos os efeitos que colocamos naquele grupo.
![](https://www.alura.com.br/artigos/assets/uploads/2018/07/image_4-3.png)
Veja que todos os grupos que criamos, por padrão, vem com um efeito do tipo Attenuation que controla justamente o volume de saída dos áudios.
![](https://www.alura.com.br/artigos/assets/uploads/2018/07/image_5-2.png)
Agora, com os grupos separados. Como faremos os sliders da tela de configuração controlarem o volume cada grupo?
Se selecionarmos um grupo, veremos no inspetor as propriedades que podemos alterar nele. A princípio, todas essas propriedades estão encapsuladas e não conseguiremos vê-las dentro do código.
![](https://www.alura.com.br/artigos/assets/uploads/2018/07/image_6-1.png)
Para isso, vamos clicar com o botão direito em cima da propriedade "volume" no inspetor da Unity e selecionar a opção “Expose ‘volume(of Musica)’ to script”.
![](https://www.alura.com.br/artigos/assets/uploads/2018/07/image_7-1.png)
Uma vez que a variável foi exposta para o código, ela fica visível na aba "exposed parameters" - parâmetros expostos - no canto direito da janela do audio mixer, é aqui que podemos renomear esses parâmetros.
![](https://www.alura.com.br/artigos/assets/uploads/2018/07/image_8-1.png)
Agora, criaremos um script que recebe um mixer e o nome do parâmetro que queremos alterar para que possamos usar essas informações e ajustar o som do jogo de acordo nosso slider.
Para isso, vamos criar uma função MudarVolume
que recebe como parâmetro um valor do tipo float. Sabemos que esse valor está entre 0 e 1, uma vez que quem vai chamar esse método é o próprio componente Slider. Assim, calcularemos o volume desejado utilizando a função Mathf.Lerp
e passar o valor calculado para o mixer utilizando o método SetFloat
dele.
public class MixerVolume : MonoBehaviour {
[SerializeField]
private AudioMixer mixer;
[SerializeField]
private string parametro;
public void MudarVolume(float config)
{
var volume = Mathf.Lerp(-60, 0, config);
this.mixer.SetFloat(parametro, volume);
}
}
![](https://www.alura.com.br/artigos/assets/uploads/2018/07/image_9.png)
Como falamos, utilizaremos o componente Slider para chamar o método MudarVolume
e faremos isso utilizando o evento "On Value Changed" - Quando o valor mudar - do próprio componente Slider.
Para adicionarmos uma "resposta" a um evento podemos clicar no “+” logo abaixo dessa propriedade. Com isso, podemos fazer com que esse evento chame o método “mudarVolume”.
![](https://www.alura.com.br/artigos/assets/uploads/2018/07/image_10.png)
Fazendo isso para os dois Sliders,temos cada um deles controlando um grupo diferente o volume da música e dos efeitos sonoros separadamente.
Você conhecia os mixers de áudio da Unity? Já tinha utilizado em algum projeto? Como você costuma separar os grupos do seu programa?
Aproveita e passa lá na Alura para conferir os cursos de Unity que temos!