Unity简单的声音切换渐变实现

来源:互联网 发布:php html转markdown 编辑:程序博客网 时间:2024/06/05 00:57

在学习Stealth案例教程中,如果按照老师的写法感觉并没有实现想要的声音渐变效果,于是就自己多写了一点。代码有点多,不过功能是实现了的。在网上也看到有人用协程来处理声音渐变效果,有时间我也试一下。

以下代码运行结果大概是这样:警报开启后,默认的bgm声音逐渐减小,然后切换到有急促感的bgm,再把声音逐渐放大;当警报解除后,又从此bgm以同样的方式渐变切换到默认bgm。
其中用到的Mathf.Lerp(),伙伴们可查API。。。。^_^

 private void Update()    {        AlarmLight._instance.alarmOn = this.alarmOn;        if (alarmOn)        {            //声音切换渐变大法            //如果当前声音是小的,目标声音是1,则切换声音文件            if (bgmAudio.volume <= 0.1 && targetVolume == 1)            {                bgmAudio.clip = bgmClip[1];                canChange = true;//可以切换                bgmAudio.Play();            }            //如果当前声音是正常的,并且目标声音是0,是否可以改变为false            if (bgmAudio.volume > 0.1 && targetVolume == 0 && canChange == false)            {                //将声音渐变到0                bgmAudio.volume = Mathf.Lerp(bgmAudio.volume, targetVolume, Time.deltaTime * bgmChangeSpeed);                if (bgmAudio.volume <= 0.1)                {                    targetVolume = 1;                }            }            //如果当前声音目标是1,并且可以切换            if (targetVolume == 1 && canChange)            {                //将声音渐变到1                bgmAudio.volume = Mathf.Lerp(bgmAudio.volume, targetVolume, Time.deltaTime * bgmChangeSpeed);                if (bgmAudio.volume >= 0.6)                {                    canChange = false;                }            }            SirenOnPlay();        }        else        {            //声音切换渐变大法            if (bgmAudio.volume <= 0.1 && targetVolume == 0)            {                bgmAudio.clip = bgmClip[0];                canChange = true;                bgmAudio.Play();            }            if (bgmAudio.volume > 0.1 && targetVolume == 1 && canChange == false)            {                bgmAudio.volume = Mathf.Lerp(bgmAudio.volume, targetVolume - 1, Time.deltaTime * bgmChangeSpeed);                if (bgmAudio.volume <= 0.1)                {                    targetVolume = 0;                }            }            if (targetVolume == 0 && canChange)            {                bgmAudio.volume = Mathf.Lerp(bgmAudio.volume, targetVolume + 1, Time.deltaTime * bgmChangeSpeed);                if (bgmAudio.volume >= 0.5)                {                    canChange = false;                }            }            SirenOnStop();        }    }
原创粉丝点击