这个声音播放的单例非常好用,创建完之后,只需要传递声音的名字,一句代码就可以播放声音了,下面是实现播放背景音乐和短音效的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Sound : MonoSingleton<Sound>
{
private AudioSource m_bg;
private AudioSource m_effect;
public string ResourcesDir = "";
protected override void Awake()
{
base.Awake();
m_bg = gameObject.AddComponent<AudioSource>();
m_bg.playOnAwake = true;
m_bg.loop = true;
m_effect = gameObject.AddComponent<AudioSource>();
}
/// <summary>
/// 播放背景音乐
/// </summary>
/// <param name="audioName"></param>
public void PlayBG(string audioName)
{
string oldName = "";
if(m_bg.clip==null)
{
oldName = "";
}
else
{
oldName = m_bg.clip.name;
}
if(oldName!=audioName)
{
//加载clip资源
string path = ResourcesDir + "/" + audioName;
AudioClip clip = Resources.Load<AudioClip>(path);
//播放音乐
if(clip!=null)
{
m_bg.clip = clip;
m_bg.Play();
}
}
}
public void PlayEffect(string audioName)
{
//加载clip资源
string path = ResourcesDir + "/" + audioName;
AudioClip clip = Resources.Load<AudioClip>(path);
m_effect.PlayOneShot(clip);
}
}
上面的代码继承了MonoSingleton< Sound>,这是我自己写的一个单例模板,只要继承了它,那么当前脚本就是一个单例了,单例模板具体实现过程移步去https://blog.csdn.net/weixin_43839583/article/details/103405296
使用前,要将声音资源拖到Resource目录下,public string ResourcesDir = ""这个需要在检视面板中输入Resource目录下的子目录文件名。写完之后,需要播放音乐时就直接类名点方法名就可以直接使用了,不需要挂载脚本,非常方便好用。