unity 创建一个声音播放的单例

这个声音播放的单例非常好用,创建完之后,只需要传递声音的名字,一句代码就可以播放声音了,下面是实现播放背景音乐和短音效的代码:

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目录下的子目录文件名。写完之后,需要播放音乐时就直接类名点方法名就可以直接使用了,不需要挂载脚本,非常方便好用。

发布了15 篇原创文章 · 获赞 0 · 访问量 256

猜你喜欢

转载自blog.csdn.net/weixin_43839583/article/details/103408332