using System.Collections.Generic; using UnityEngine; using UnityEngine.Audio; namespace TEngine { /// /// 音效管理,为游戏提供统一的音效播放接口。 /// /// 场景3D音效挂到场景物件、技能3D音效挂到技能特效上,并在AudioSource的Output上设置对应分类的AudioMixerGroup public class AudioModule : Module { [SerializeField] private AudioMixer m_AudioMixer; [SerializeField] private Transform m_InstanceRoot = null; [SerializeField] private AudioGroupConfig[] m_AudioGroupConfigs = null; public IAudioModule AudioModuleImp; #region Public Propreties /// /// 音频混响器。 /// public AudioMixer MAudioMixer => m_AudioMixer; /// /// 实例化根节点。 /// public Transform InstanceRoot { get => m_InstanceRoot; set => m_InstanceRoot = value; } /// /// 总音量控制。 /// public float Volume { get => AudioModuleImp.Volume; set => AudioModuleImp.Volume = value; } /// /// 总开关。 /// public bool Enable { get => AudioModuleImp.Enable; set => AudioModuleImp.Enable = value; } /// /// 音乐音量。 /// public float MusicVolume { get => AudioModuleImp.MusicVolume; set => AudioModuleImp.MusicVolume = value; } /// /// 音效音量。 /// public float SoundVolume { get => AudioModuleImp.SoundVolume; set => AudioModuleImp.SoundVolume = value; } /// /// UI音效音量。 /// public float UISoundVolume { get => AudioModuleImp.UISoundVolume; set => AudioModuleImp.UISoundVolume = value; } /// /// 语音音量。 /// public float VoiceVolume { get => AudioModuleImp.VoiceVolume; set => AudioModuleImp.VoiceVolume = value; } /// /// 音乐开关 /// public bool MusicEnable { get => AudioModuleImp.MusicEnable; set => AudioModuleImp.MusicEnable = value; } /// /// 音效开关。 /// public bool SoundEnable { get => AudioModuleImp.SoundEnable; set => AudioModuleImp.SoundEnable = value; } /// /// UI音效开关。 /// public bool UISoundEnable { get => AudioModuleImp.UISoundEnable; set => AudioModuleImp.UISoundEnable = value; } /// /// 语音开关。 /// public bool VoiceEnable { get => AudioModuleImp.VoiceEnable; set => AudioModuleImp.VoiceEnable = value; } #endregion /// /// 初始化音频模块。 /// void Start() { if (AudioModuleImp == null) { AudioModuleImp = ModuleImpSystem.GetModule(); } if (m_InstanceRoot == null) { m_InstanceRoot = new GameObject("AudioModule Instances").transform; m_InstanceRoot.SetParent(gameObject.transform); m_InstanceRoot.localScale = Vector3.one; } AudioModuleImp.Initialize(m_AudioGroupConfigs, m_InstanceRoot, m_AudioMixer); } /// /// 重启音频模块。 /// public void Restart() { AudioModuleImp.Restart(); } /// /// 播放,如果超过最大发声数采用fadeout的方式复用最久播放的AudioSource。 /// /// 声音类型 /// 声音文件路径 /// 是否循环播放> /// 音量(0-1.0) /// 是否异步加载 /// 是否支持资源池 public AudioAgent Play(AudioType type, string path, bool bLoop = false, float volume = 1.0f, bool bAsync = false, bool bInPool = false) { return AudioModuleImp.Play(type, path, bLoop, volume, bAsync, bInPool); } /// /// 停止某类声音播放。 /// /// 声音类型。 /// 是否渐消。 public void Stop(AudioType type, bool fadeout) { AudioModuleImp.Stop(type, fadeout); } /// /// 停止所有声音。 /// /// 是否渐消。 public void StopAll(bool fadeout) { AudioModuleImp.StopAll(fadeout); } /// /// 预先加载AudioClip,并放入对象池。 /// /// AudioClip的AssetPath集合。 public void PutInAudioPool(List list) { AudioModuleImp.PutInAudioPool(list); } /// /// 将部分AudioClip从对象池移出。 /// /// AudioClip的AssetPath集合。 public void RemoveClipFromPool(List list) { AudioModuleImp.RemoveClipFromPool(list); } /// /// 清空AudioClip的对象池。 /// public void CleanSoundPool() { AudioModuleImp.CleanSoundPool(); } } }