TH1/Unity/Assets/Scripts/TH1_UI/SettingUI/VolumeSliderController.cs
2026-01-31 19:39:54 +08:00

79 lines
2.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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