NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Framework/Audio/AudioVolumeSettings.cs

130 lines
2.9 KiB
C#

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