这篇博客介绍一个unity的总的音频管理器
可以有效避免音频错乱的问题
我们把它挂在场景中 可以使用跨场景保存的方法来实现场景跳转之后的存在
首先 这篇博客会用到我之前介绍的知识
我下面把链接先给大家贴出来
unity音频管理器(AudioMixer)
unity的代码可视化
然后就进入正题了
直接给出音频管理器的代码
public class AudioManager : MonoBehaviour
{
//音频管理器 存储所有的音频并且可以播放和停止
[Serializable]
public class Sound
{
[Header("音频剪辑")]
public AudioClip clip;
[Header("音频分组")]
public AudioMixerGroup outputGroup;
[Header("音频音量")]
[Range(0, 1)]
public float volume;
[Header("音频是否自启动")]
public bool PlayOnAwake;
[Header("音频是否要循环播放")]
public bool loop;
}
public List<Sound> sounds;//存储所有音频的信息
private Dictionary<string, AudioSource> audioDic;//每一个音频的名称组件
private static AudioManager instance;
public static AudioManager Instance { get => instance; set => instance = value; }
private void Awake()
{
audioDic = new Dictionary<string, AudioSource>();
instance = this;
}
private void Start()
{
foreach(var sound in sounds)
{
GameObject obj = new GameObject(sound.clip.name);
obj.transform.SetParent(transform);
AudioSource source = obj.AddComponent <AudioSource>();
source.clip = sound.clip;
source.volume = sound.volume;
source.playOnAwake = sound.PlayOnAwake;
source.loop = sound.loop;
source.outputAudioMixerGroup = sound.outputGroup;
if (sound.PlayOnAwake)
{
source.Play();
}
audioDic.Add(sound.clip.name, source);
}
}
//播放某个音频的方法 iswait为是否等待
public static void PlayAudio(string name,bool iswait = false)
{
if(!instance.audioDic.ContainsKey(name))
{
//不存在次音频
Debug.LogError("不存在" + name + "音频");
return;
}
if (iswait)
{
if(!instance.audioDic[name].isPlaying)
{
//如果是等待的情况 不在播放
instance.audioDic[name].Play();
}
}
else
{
//直接播放
instance.audioDic[name].Play();
}
}
//停止音频的播放
public static void StopMute(string name)
{
if (!instance.audioDic.ContainsKey(name))
{
//不存在次音频
Debug.LogError("不存在" + name + "音频");
return;
}
else
{
instance.audioDic[name].Stop();
}
}
}
使用方法就是 通过单例 然后调用里边写的方法 实时随心所欲的播放音频
下面是两个音乐(实例化出来的)
然后就是控制全局的音频混响器的代码
public class SettingManager : MonoBehaviour
{
[Header("音频混响器")]
public AudioMixer mixer;//音频混响器
public void SetBGMbolume(float Value)
{
//调整BGM的音量
mixer.SetFloat("BGM", Value);
}
}
如果你开发过项目 就能感觉到这个真的是好用
希望我所写的对大家有所帮助
主页有我的联系方式如果有问题 或者是合作可以联系我(知无不答)