unity制作五子棋——音效部分总结
业务关系:
运行游戏时,背景音乐响起。在对弈界面存在设置按钮,点击可进入调整背景音乐的界面,
当点击“古琴版”时,背景音乐更换为“平沙落雁——古琴版”,当点击“复原”按钮时,音乐更
换为“平沙落雁——琴箫版”
- 在Camera部分挂上SoundPlay脚本,使得整个游戏使用过程都存在背景音乐
代码部分
/*定义部分*/
//用private定义用于控制声音的AudioSource组件
private AudioSource _audioSource;
//用public定义AudioClip,将准备好的MP3格式的平沙落雁琴萧合奏版拉入此处
public AudioClip QinXiao;
//用public定义AudioClip,将准备好的MP3格式的平沙落雁古琴合奏版拉入此处
public AudioClip GuQin;
void Awake()
{
//在添加此脚本的对象中添加AudioSource组件,此处为摄像机
_audioSource = this.gameObject.AddComponent<AudioSource>();
//设置循环播放
_audioSource.loop = true;
//设置音量为最大,区间在0-1之间
_audioSource.volume = 500.0f;
//初始AudioSource播放琴箫版
_audioSource.clip = QinXiao;
isPlayMusic = true;
//初始化时播放音乐,使得一登陆游戏便奏起背景音乐
_audioSource.Play();
//设置音乐的前端部分初始为不可见,否则每个界面都出现
showMenu = false;
isQinXiao = true;
}
private void Start()
{
//由于下文的Toggle部分的逻辑原因,使得需要设置“复原”button
//点击按钮,背景音乐转换为初始化时的琴箫版
sureBtn.onClick.AddListener(() =>
{
isQinXiao = true;
isGuQin = false;
_audioSource.clip = QinXiao;
isPlayMusic = true;
//必须先让播放源暂停才能再次调用Play方法。
//因为如果此时已经在播放,再次调用Play方法,播放源会不再工作
_audioSource.Pause();
_audioSource.Play();
});
}
void Update()
{
if(isPlayMusic == false) _audioSource.Pause();
//由于初始化选择“琴箫版”,即古琴版的Toggle为true
//所以当点击“古琴版”,“琴箫版”Toggle为false
//因为此处业务是切换背景音乐,两者是非此即彼关系
if(isGuQin)
{
isQinXiao= false;
_audioSource.clip = Guqin;
isPlayMusic = true;
_audioSource.Pause();
_audioSource.Play();
}
}
void OnGUI()
{
if (showMenu)
{
//绘制播放按钮并设置其点击后的处理
if (GUI.Button(new Rect(100, 10, 80, 30), "Play"))
{
//播放声音
if (isPlayMusic)
{
_audioSource.Pause();
_audioSource.Play();
}
}
//绘制暂停按钮并设置其点击后的处理
if (GUI.Button(new Rect(100, 50, 80, 30), "Pause"))
{
//暂停声音,暂停后再播放,则声音为继续播放
_audioSource.Pause();
}
//绘制停止按钮并设置其点击后的处理
if (GUI.Button(new Rect(100, 90, 80, 30), "Stop"))
{
//停止播放,停止后再播放,则声音为从头播放
_audioSource.Stop();
}
//音量控制Label
GUI.skin.label.fontSize = 15;
GUI.color = Color.black;
GUI.Label(new Rect(100, 130, 100, 30), "音量大小调节");
//音量控制slider
_audioSource.volume = GUI.HorizontalSlider(new Rect(210, 136, 100, 20), _audioSource.volume, 0.0f, 1.0f);
//选择是否播放背景音乐
isQinXiao = GUI.Toggle(new Rect(100, 170, 100, 20), isQinXiao, "琴箫版");
//选择是否播放按键声音
isGuQin = GUI.Toggle(new Rect(210, 170, 100, 20), isGuQin, "古琴版");
}
}
- 在Sound部分,挂上JmpToSoundPlay脚本,该脚本作用是调用并更改SoundPlay脚本的showMenu变量
/*定义部分*/
//定义SoundPlay类,在Unity将SoundPlay脚本挂上
public SoundPlay sp;
//定义GameObject类,在Unity将Main Camera挂上
public GameObject _camera;
private void Awake()
{
/实例化SoundPlay,使其指向游戏的播放源
sp = _camera.GetComponent<SoundPlay>();
sp.showMenu = true;
}