130 lines
2.9 KiB
C#
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
|
|
}
|
|
|