Unity全局音量控制以及音量信息存储在本地

Unity全局音量控制以及音量信息存储在本地

一个简单的全局音量控制功能,主要实现进入游戏音量同步以前的设置,点击设置弹出设置窗口,点击小喇叭禁用\开启音量,移动滑动条调节音量大小。
Unity全局音量控制以及音量信息存储在本地_第1张图片
设置按钮

一、进入游戏时设置音量

//设置声音
        if (PlayerPrefs.GetString(Const.IsOnVolume) == "") {
            PlayerPrefs.SetString(Const.IsOnVolume, "true");
            PlayerPrefs.Save();
        }
        if (PlayerPrefs.GetString(Const.IsOnVolume) == "true") {
            AudioListener.volume = PlayerPrefs.GetFloat(Const.Volume);
        }
        if (PlayerPrefs.GetString(Const.IsOnVolume) == "false") {
            AudioListener.volume = 0f;
        }

这里Const是自定义的常量类,也可以直接用一个字符串。

二、设置界面的脚本

变量

    //音量按钮
    private Button _volumeBtn;
    //音量滑动条
    private Slider _volumeSlider;

打开设置界面执行的操作

//寻找组件
        _closeBtn = skin.transform.Find("CloseBtn").GetComponent<Button>();
        _quitBtn = skin.transform.Find("QuitBtn").GetComponent<Button>();
        _volumeBtn = skin.transform.Find("VolumePanel").Find("VolumeBtn").GetComponent<Button>();
        _volumeSlider = skin.transform.Find("VolumePanel").Find("VolumeSlider").GetComponent<Slider>();
        //监听
        _volumeBtn.onClick.AddListener(OnVolumeClick);
        _volumeSlider.onValueChanged.AddListener(OnVolumeValueChanged);
        _closeBtn.onClick.AddListener(OnCloseClick);
        _quitBtn.onClick.AddListener(OnQiutClick);
        //初始化音量控制条及小喇叭颜色
        string isOnVolume = PlayerPrefs.GetString(Const.IsOnVolume);
        _volumeSlider.value = PlayerPrefs.GetFloat(Const.Volume);
        PlayerPrefs.SetString(Const.IsOnVolume, isOnVolume);
        PlayerPrefs.Save();
        if (PlayerPrefs.GetString(Const.IsOnVolume) == "true") {
            AudioListener.volume = PlayerPrefs.GetFloat(Const.Volume);
            _volumeBtn.GetComponent<Image>().color = Color.green;
        }
        if (PlayerPrefs.GetString(Const.IsOnVolume) == "false") {
            AudioListener.volume = 0f;
            _volumeBtn.GetComponent<Image>().color = Color.gray;
        }

音量按钮和音量滑动条事件

  //声音滑动条滑动
    private void OnVolumeValueChanged(float value) {
        PlayerPrefs.SetFloat(Const.Volume, value);
        AudioListener.volume = value;
        PlayerPrefs.SetString(Const.IsOnVolume, "true");
        PlayerPrefs.Save();
        _volumeBtn.GetComponent<Image>().color = Color.green;
    }
    //声音按钮点击
    private void OnVolumeClick() {
        if (PlayerPrefs.GetString(Const.IsOnVolume) == "true") {
            PlayerPrefs.SetString(Const.IsOnVolume, "false");
            PlayerPrefs.Save();
            AudioListener.volume = 0;
            _volumeBtn.GetComponent<Image>().color = Color.gray;
            return;
        }
        if (PlayerPrefs.GetString(Const.IsOnVolume) == "false") {
            PlayerPrefs.SetString(Const.IsOnVolume, "true");
            PlayerPrefs.Save();
            AudioListener.volume = _volumeSlider.value;
            _volumeBtn.GetComponent<Image>().color = Color.green;
            return;
        }
    }

因为没有小喇叭被叉的图片,用灰绿两种颜色代替开启\未开启音量的状态。

你可能感兴趣的:(Unity,unity,游戏)