单例模板
public class MonoSingleton<T> : MonoBehaviour
where T:MonoBehaviour
{
private static T m_instance;
public static T Instance
{
get
{
return m_instance;
}
}
protected virtual void Awake()
{
m_instance = this as T;
}
}
音效单例的实现
- 项目中需要播放两种音效,背景音效以及一些其他效果音效,所以需要两个AudioSouce
- 播放背景音乐,需要进行判断是否需要切换。如果要播放的音效和当前正在播放的音效一致,则不需要更换音效,发之切换音效。
- 效果音效只需要名字和资源加载路径一起组合成新的路径,使用Resource加载进行播放就可以了。
public class Sound : MonoSingleton<Sound>
{
AudioSource m_Bg;
AudioSource m_Effect;
public string ResourcesDir="";//资源加载路径 在外部进行赋值
protected override void Awake()
{
base.Awake();
m_Bg = gameObject.AddComponent<AudioSource>();
m_Bg.playOnAwake = false;
m_Bg.loop = true;
m_Effect = gameObject.AddComponent<AudioSource>();
}
public void PlayBg(string audioName)
{
string oldName;//临时变量,正在播放的音效名字
if (m_Bg.clip==null)//如果当前没有在播放音效
{
oldName = "";
}
else
{
oldName = m_Bg.clip.name;//在播放就得到名字
}
if (oldName!=audioName)//判断要播放的和正在播放的音效名字是否一致
{
//不一致
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)
{
string path = ResourcesDir + "/" + audioName;
AudioClip clip = Resources.Load<AudioClip>(path);
m_Effect.PlayOneShot(clip);
}
}
有需要学习视频欢迎关注微信公众号