// VolumeSliderController.cs
using Logic.Audio;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events; // 用于 UnityEvent
///
/// 控制UI Slider的脚本,用于音量调节。
/// 提供了获取0-100值的接口,并触发回调事件。
/// 该脚本直接挂载在 Slider UI 对象上。
///
[RequireComponent(typeof(Slider))] // 确保挂载此脚本的对象上必然有Slider组件
public class VolumeSliderController : MonoBehaviour
{
public bool IsMusic = false;
private Slider volumeSlider;
private void Awake()
{
volumeSlider = GetComponent();
// 确保 Slider 的范围是 0 到 1
volumeSlider.minValue = 0f;
volumeSlider.maxValue = 1f;
if(IsMusic)
volumeSlider.value = AudioManager.Instance.MusicVolume;
else
volumeSlider.value = AudioManager.Instance.AudioVolume;
// 监听 Slider 的值变化事件
volumeSlider.onValueChanged.AddListener(HandleSliderValueChanged);
}
private void OnDestroy()
{
// 移除事件监听,防止内存泄漏(尤其是在场景切换时)
if (volumeSlider != null)
{
volumeSlider.onValueChanged.RemoveListener(HandleSliderValueChanged);
}
}
///
/// 处理 Slider 值变化的内部方法。
/// 将 0-1 的浮点值转换为 0-100 的整数,并触发事件。
///
/// Slider 的 0-1 浮点值。
private void HandleSliderValueChanged(float value)
{
if(IsMusic)
AudioManager.Instance.MusicVolume = value ;
else
AudioManager.Instance.AudioVolume = value;
// Debug.Log($"Volume changed to: {volume0_100}"); // 可用于调试
}
///
/// 设置 Slider 的初始音量值(0-100)。
/// 通常在游戏启动或加载设置时调用。
///
/// 要设置的 0-100 整数音量值。
public void SetInitialVolume(float v)
{
volumeSlider.value = v;
}
///
/// 获取当前的音量值(0-100)。
///
/// 当前的 0-100 整数音量值。
public float GetCurrentVolume()
{
return volumeSlider.value;
}
}