个人遇到的一个问题:
? ? ? 滑动条Slider控制AudioSource音量,虽然音源大小确实和滑动条值同步改变,但是实际音量并未同步改变,只有当我关闭UI界面时,音量才会发生改变。
这个问题我试了好久没有解决,所以干脆换一种思路,通过滑动条控制AudioMixer控制音量大小
使用AudioMixer需要注意的地方:
1.需要右键暴露参数(Expose Parameters),并在音频混合器选项卡中右键重命名参数,以便在代码中调用
2.滑动条的最大值和最小值需要与AudioMixer中的值域匹配,值域如下图。
? ?我一般最小值设置为-20,最大值为20。(需要注意的是,这样就算滑动条拉到最小值也不会停止播放音乐,所以我加了一个判断语句和公共AudioSource变量,当滑动条拉到最小值时停止播放音乐)
?3.个人觉得拖动滑动条改变音量不用放在Update函数中,通过下图的值改变时调用方法就可
代码如下:
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 + "%"); ? ? } ? ? } ?
|