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.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. 效果实现。