// 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; } }