unity中滑动条控制音乐大小

创建储存系统,保存音乐值

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;

public static class SaveSystem
{
    #region Prefs
    //保存数据
    public static void SaveByPlayerPrefs(string key, object data)
    {
        var josn = JsonUtility.ToJson(data, true);//将物体转为josn true方便人阅读
        PlayerPrefs.SetString(key, josn);//注册数据
        PlayerPrefs.Save();//保存在硬盘
    }
    //加载数据
    public static string LoadForPlayerPrefs(string key)
    {
        return PlayerPrefs.GetString(key);//读取数据
    }
    #endregion
    #region JSON
    //储存数据
    public static void SaveByJson(string saveFileName, object data)
    {
        var json = JsonUtility.ToJson(data);
        var path = Path.Combine(Application.persistentDataPath, saveFileName);//unity中自带申请储存位置的函数 Application.persistentDataPath
        try
        {
            Debug.Log($"susscessfully save data to {path}");
            File.WriteAllText(path, json);//WriteAllText 创建文本  文件路径 文件内容 覆写内容

        }
        catch (System.Exception exception)//获取系统异常处理
        {
#if UNITY_EDITOR//只在unity中运行
            Debug.LogError($"Failed to save data to {path}.\n{exception}");
#endif
        }
    }
    //加载数据
    public static T LoadFromJson<T>(string saveFileName)
    {
        var path = Path.Combine(Application.persistentDataPath, saveFileName);//unity中自带申请储存位置的函数
        try
        {
            var json = File.ReadAllText(path);//读取文件
            var data = JsonUtility.FromJson<T>(json);//转化json文件数据
            return data;
        }
        catch (System.Exception exception)//获取系统异常处理
        {
#if UNITY_EDITOR//只在unity中运行
            Debug.LogError($"Failed to load data from {path}.\n{exception}");
#endif
            return default;
        }
    }
    //删除数据
    public static void DeleteSaveFile(string saveFileName)
    {
        var path = Path.Combine(Application.persistentDataPath, saveFileName);//unity中自带申请储存位置的函数
        try
        {
            File.Delete(path);
        }
        catch (System.Exception exception)//获取系统异常处理
        {
#if UNITY_EDITOR//只在unity中运行
            Debug.LogError($"Failed to Delete data from {path}.\n{exception}");
#endif

        }
    }
    //检查数据是否存在
    public static bool SaveFileExists(string saveFileName)
    {
        var path = Path.Combine(Application.persistentDataPath, saveFileName);//unity中自带申请储存位置的函数
        return File.Exists(path);//检查玩家数据是否存在
    }
    #endregion
}

再生成音乐音量控制类,挂载到有滑动条组件上

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.UIElements;

public class VolumeController : MonoBehaviour
{
    public AudioSource audioSource;  // 引用要控制音量的 AudioSource 组件

    private UnityEngine.UI.Slider slider;  // 引用 Slider 组件

    private void Awake()
    {
        // 查找 Slider 组件
        slider = GetComponent<UnityEngine.UI.Slider>();
    }

    private void Start()
    {
          audioSource.volume=LoadPlayerVolumeData().volume;
          slider.value=LoadPlayerVolumeData().volume;
        // 监听 Slider 的 onValueChanged 事件
        slider.onValueChanged.AddListener(OnSliderValueChanged);

    }


    private void OnSliderValueChanged(float value)
    {
        // 将 Slider 的值映射到 0.0 到 1.0 的范围,并设置为音频的音量
        audioSource.volume = slider.value;
        UpdatePlayerVolumeData();
    }

    #region VolumeSave

    [System.Serializable]
    public class PlayerVolume//封装玩家数据
    {
        public float volume;
        public PlayerVolume(float volume)//构造函数 构造函数的作用就是初始化一个新创建的对象,并在使用对象前设置对象的属性,也就是实例化;
        {
            this.volume = volume;
        }
    }
    string SaveFileName = "player_volume.json";
    //加载玩家数据
    public PlayerVolume LoadPlayerVolumeData()
    {
        var playerScoreData = new PlayerVolume(audioSource.volume);

        if (SaveSystem.SaveFileExists(SaveFileName))//是否有玩家数据
        {
            playerScoreData= SaveSystem.LoadFromJson<PlayerVolume>(SaveFileName);//读取数据
        }
        else
        {
            SaveSystem.SaveByJson(SaveFileName, playerScoreData);//保存数据
        }
        return playerScoreData;
    }
    //更新玩家数据和保存玩家数据
    public PlayerVolume UpdatePlayerVolumeData()
    {
        var playerScoreData = new PlayerVolume(audioSource.volume);
        SaveSystem.SaveByJson(SaveFileName, playerScoreData);//保存数据
        return playerScoreData;
    }
    #endregion

}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值