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
}