Assets/Scripts/AudioManager.cs (51 lines of code) (raw):
using System;
using UnityEngine;
using UnityEngine.UI;
public class AudioManager : MonoBehaviour
{
[SerializeField] private AudioSource sfxAudioSource;
[SerializeField] private AudioSource loopAudioSource;
[SerializeField] private AudioSource musicAudioSource;
[SerializeField] private Toggle sfxToggle;
[SerializeField] private Toggle musicToggle;
public void ToggleSfx()
{
sfxAudioSource.enabled = !sfxAudioSource.enabled;
loopAudioSource.enabled = !loopAudioSource.enabled;
}
public void ToggleMusic()
{
musicAudioSource.enabled = !musicAudioSource.enabled;
}
public void PlaySfx(AudioClip audioClip, bool loop = false)
{
if (!loop)
{
if (!sfxAudioSource.enabled) return;
sfxAudioSource.PlayOneShot(audioClip);
}
else
{
if (!loopAudioSource.enabled) return;
if (loopAudioSource.isPlaying) return;
loopAudioSource.clip = audioClip;
loopAudioSource.loop = true;
loopAudioSource.Play();
}
}
public void StopSfx(AudioClip audioClip)
{
if (sfxAudioSource.enabled &&
sfxAudioSource.isPlaying &&
sfxAudioSource.clip == audioClip)
{
sfxAudioSource.Stop();
}
else if (loopAudioSource.enabled &&
loopAudioSource.isPlaying &&
loopAudioSource.clip == audioClip)
{
loopAudioSource.Stop();
}
}
}