using UnityEngine; /// /// 音频音量全局配置类 /// 职责:统一管理所有音量设置,替代分散的静态字段 /// 注意:使用 AudioVolumeSettings 避免与 Unity 内置的 UnityEngine.AudioSettings 冲突 /// public class AudioVolumeSettings { #region Singleton private static AudioVolumeSettings _instance; public static AudioVolumeSettings Instance { get { if (_instance == null) { _instance = new AudioVolumeSettings(); } return _instance; } } #endregion #region Volume Settings /// /// 全局总音量 (0-1) /// public float GlobalVolume { get => _globalVolume; set => _globalVolume = Mathf.Clamp01(value); } private float _globalVolume = 1f; /// /// 音乐音量 (0-1) /// public float MusicVolume { get => _musicVolume; set => _musicVolume = Mathf.Clamp01(value); } private float _musicVolume = 1f; /// /// 音效音量 (0-1) /// public float SoundVolume { get => _soundVolume; set => _soundVolume = Mathf.Clamp01(value); } private float _soundVolume = 1f; /// /// 语音音量 (0-1) /// public float SpeakVolume { get => _speakVolume; set => _speakVolume = Mathf.Clamp01(value); } private float _speakVolume = 1f; #endregion #region Computed Volumes /// /// 获取音乐的最终音量(全局音量 * 音乐音量) /// public float GetMusicVolume() => GlobalVolume * MusicVolume; /// /// 获取音效的最终音量(全局音量 * 音效音量) /// public float GetSoundVolume() => GlobalVolume * SoundVolume; /// /// 获取语音的最终音量(全局音量 * 语音音量) /// public float GetSpeakVolume() => GlobalVolume * SpeakVolume; #endregion #region Utility Methods /// /// 重置所有音量到默认值 /// public void ResetToDefaults() { GlobalVolume = 1f; MusicVolume = 1f; SoundVolume = 1f; SpeakVolume = 1f; } /// /// 静音所有音频 /// public void MuteAll() { GlobalVolume = 0f; } /// /// 取消静音(恢复到上次的音量) /// public void UnmuteAll() { if (GlobalVolume == 0f) { GlobalVolume = 1f; } } /// /// 检查是否静音 /// public bool IsMuted => GlobalVolume <= 0f; #endregion }