【Unity快速实现小功能】声音控制三部曲之(二)—— 音效与背景音乐的叠加及控制

Unity中实现在声音的叠加播放有两种情况:

1)2种及以上背景音乐的播放,此处直接使用两种及以上AudioSource分别控制即可;

2)背景音乐播放的同时,添加2种及以上的音效播放。此处可考虑使用PlayOnShot或PlayClipAtPoint方法。

下面主要针对第2)种情况进行总结及实现。

PlayOnShot方法与PlayClipAtPoint方法的区别:

PlayOnShot(AudioClip clip,float volumeScale= 1.0f)

参数  clip 为需要播放的声音片段(文件)

     VolumeScale为声音播放的音量大小

作用   在需要播放某个较小片段的声音时,如按钮点击的音效,可使用此方法

特点    需要一个AudioSource对象audioSource,才可以通过audioSource.PlayOnShot(clip)使用此方法;可以通过对audioSource的控制,进而控制clip的播放、销毁。

PlayClipAtPoint(AudioClip clip, Vector3position, float volume = 1.0f)

参数   clip为需要播放的声音片段(文件)

            position为需要插入声音的坐标点

      volume为插入声音的音量大小

作用   在某处播放某个声音片段

特点   不需要实例化一个AudioSource对象即可使用,用法为AudioSource.PlayClipAtPoint(clip,position),同时在播放完成后自动消除音频源,但是无法在其播放阶段控制其销毁。

 

问题描述:在播放背景音乐的同时播放某个音效。

解决方案:

1.  需要2个mp3格式的声音文件、需要AudioSource组件、AudioClip组件、AudioListener组件、GUI组件(系统自带)。

2.  创建一个脚本,命名为SoundPlay2.cs,并将添加至主摄像机下。确保摄像机下AudioListener组件为激活状态。(只要将SoundPlay2.cs和AudioListener组件加入场景中任意对象即可,并非一定是摄像机,此处为了简便)

3. SoundPlay2.cs代码如下:

using UnityEngine;

usingSystem.Collections;

 

publicclass SoundPlay2 : MonoBehaviour

{

 

    //将准备好的MP3格式的背景声音文件拖入此处

    public AudioClip backgroundMusic;

 

    //将准备好的MP3格式的音效文件拖入此处

    public AudioClip palyOnceSound;

 

    //用于控制声音的AudioSource组件

    private AudioSource _audioSource;

 

    void Awake()

    {

        //在添加此脚本的对象中添加AudioSource组件,此处为摄像机

        _audioSource =this.gameObject.AddComponent<AudioSource>();

        //设置循环播放

        _audioSource.loop = true;

        //设置音量为最大,区间在0-1之间

        _audioSource.volume = 1.0f;

        //设置audioClip

        _audioSource.clip = backgroundMusic;

    }

 

    void OnGUI()

    {

        //绘制播放按钮并设置其点击后的处理

        if (GUI.Button(new Rect(10, 10, 80,30), "Play"))

        {

            //播放声音

            _audioSource.Play();

        }

 

        //绘制暂停按钮并设置其点击后的处理

        if (GUI.Button(new Rect(10, 50, 80,30), "Pause"))

        {

            //暂停声音,暂停后再播放,则声音为继续播放

            _audioSource.Pause();

        }

 

        //绘制停止按钮并设置其点击后的处理

        if (GUI.Button(new Rect(10, 90, 80,30), "Stop"))

        {

            //停止播放,停止后再播放,则声音为从头播放

            _audioSource.Stop();

        }

 

     //绘制添加音效按钮,PlayOnShot方式添加音效

        if(GUI.Button(newRect(100,10,120,30),"AddSoound_Method_1"))

        {

            _audioSource.PlayOneShot(palyOnceSound);

        }

 

        //绘制添加音效按钮,PlayClipAtPoint方式添加音效

        if(GUI.Button(newRect(100,50,120,30),"AddSoun_Method_2"))

        {

    AudioSource.PlayClipAtPoint(palyOnceSound,_audioSource.transform.localPosition);

        }

   }

}


4.    将SoundPlay2脚本组件拖入摄像机后,截图如下图1所示:


                                             

                                                图1

5.    运行后场景中效果如图2所示:

                                              

                                                图2

6.    效果实现。

猜你喜欢

转载自blog.csdn.net/Winner_2012/article/details/46558435
今日推荐