Todo bom jogo que se preze tem arquivos de áudios, seja uma música de fundo, clique de botão ou até mesmo o efeito de um ataque inimigo. Para a nossa felicidade, a Unity 3D possuí vários recursos que vão facilitar a nossa vida na hora de deixar nossos AudioClips mais dinâmicos.
É preciso entender o que são e a finalidade de cada um dos componentes e só daí vai ser possível criar scripts que manipulam seus atributos. Vamos ver os três componentes que vamos utilizar.
- AudioListener - Podemos ter apenas um ativo por cena, ele funciona como os “ouvidos” do jogador, captando todo o áudio da cena e reproduzindo na saída de som do Hardware. Encontramos esse componente na Camera;
- AudioClip - É um arquivo de áudio, seja um .mp3, .wav ou .ogg;
- AudioSource - Esse é o componente responsável por reproduzir nosso áudio, ele funciona como um MP3 Player, recebe uma fita de música (AudioClip) e tem os botões (método) de reproduzir, pausar e parar.
Uma vez que a gente entendeu esse três componentes, agora vamos criar um C# script chamado de AudioController. Para o nosso exemplo, associamos ele a um GameObject vazio. Vamos inserir o código abaixo no nosso script.
using UnityEngine;
//Requisitamos o componente AudioSource
[RequireComponent(typeof(AudioSource))]
public class AudioController : MonoBehaviour
{
//Variável que recebe nosso clipe de áudio
public AudioClip audioClip;
//Variável de controle para play e stop
private bool play = false;
//Variável que gerencia o volume
private float volume = 1.0f;
//Variável que acessa nosso componente AudioSource
private AudioSource audioSource;
void Start()
{
//Obtemos o componente AudioSource e atribuimos a variável
audioSource = GetComponent<AudioSource>();
//Definimos o AudioClip na propriedade clip do AudioSource
audioSource.clip = audioClip;
}
void Update()
{
//Caso pressione a tecla E
if (Input.GetKeyDown(KeyCode.E))
{
//Chama o método de aumentar o volume & Altera o volume do jogo
AudioListener.volume = VolumeUp();
}
//Caso pressione a tecla Q
if (Input.GetKeyDown(KeyCode.Q))
{
//Chama o método de diminuir o volume & Abaixa o volume do jogo
AudioListener.volume = VolumeDown();
}
//Caso pressione a tecla P
if (Input.GetKeyDown(KeyCode.P))
{
//A variável vai sempre receber a negação do seu valor atual. Se for true, então vira false.
play = !play;
//Caso o play for true
if (play)
//Chama o método de reproduzir o áudio
PlayAudio();
//Caso o play for false
else
//Chama o método de parar o áudio
StopAudio();
}
}
//Método de aumentar volume
float VolumeUp()
{
//Caso o volume seja maior ou igual a 1
if (volume >= 1)
//Retorna o valor atual da variável
return volume;
//Acrescentamos 0.1 ao valor já existente na variável
volume += 0.1f;
//Retornamos um float com o valor do volume
return volume;
}
//Método de diminuir o volume
float VolumeDown()
{
//Caso o volume seja menor ou igual a 0
if (volume <= 0)
//Retorna o valor atual da variável
return volume;
//Decrementamos 0.1 ao valor já existente na variável
volume -= 0.1f;
//Retornamos um float com o valor do volume
return volume;
}
//Método para reproduzir áudio
void PlayAudio()
{
//Reproduzimos o áudio
audioSource.Play();
}
//Método para parar áudio
void StopAudio()
{
//Paramos a execução di áudio
audioSource.Stop();
}
}
Okay, há duas coisas que precisamos entender:
- Não podemos chamar métodos do componente AudioSource sem que um AudioClip esteja de fato atribuído a ele;
- Devemos acessar a propriedade estática volume do AudioListener e nunca através de uma instância, ex: (new AudioListener().volume).
Agora é só dar play na Unity e pressionar as teclas:
- Q - Abaixo o volume;
- E - Aumenta o volume;
- P - Reproduz/Para o áudio.
Finalizamos mais um conteúdo, até a próxima!