Unity使用滑动条Slider控制AudioSource音量,音量不能及时改变的问题

个人遇到的一个问题:

      滑动条Slider控制AudioSource音量,虽然音源大小确实和滑动条值同步改变,但是实际音量并未同步改变,只有当我关闭UI界面时,音量才会发生改变。

这个问题我试了好久没有解决,所以干脆换一种思路,通过滑动条控制AudioMixer控制音量大小

使用AudioMixer需要注意的地方:

1.需要右键暴露参数(Expose Parameters),并在音频混合器选项卡中右键重命名参数,以便在代码中调用

2.滑动条的最大值和最小值需要与AudioMixer中的值域匹配,值域如下图。

   我一般最小值设置为-20,最大值为20。(需要注意的是,这样就算滑动条拉到最小值也不会停止播放音乐,所以我加了一个判断语句和公共AudioSource变量,当滑动条拉到最小值时停止播放音乐)

 3.个人觉得拖动滑动条改变音量不用放在Update函数中,通过下图的值改变时调用方法就可

Unity使用滑动条Slider控制AudioSource音量,音量不能及时改变的问题_第1张图片

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Audio;


public class volumeControl : MonoBehaviour
{
    public AudioSource BGM;
    public AudioMixer BGMMixer;
    public Slider VolumeControl;
    public Text VolunmePer;
 

    public void SetVolume()
    {
        BGMMixer.SetFloat("BGM",VolumeControl.value);//将变量BGM的值设置为滑动条的值
        var per = 100*((VolumeControl.value + 10) / 20);//因为这里滑动条最小值为-10,最大值为10,显示百分比时就用这个公式计算
        VolunmePer.text = per.ToString("f0") + "%";//保留整数部分,显示音量百分比

        if (per.ToString("f0") == "0") //若音量百分比为0就停止播放,否则继续
        {
            BGM.Pause();
        }
        else
        {
            BGM.UnPause();
        }
        Debug.Log("此时音量值为:" + per + "%");
    }
   
}
 

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