79 lines
2.4 KiB
C#
79 lines
2.4 KiB
C#
// 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;
|
||
}
|
||
}
|
||
|