• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

游戏开发

一行代码播放指定BGM

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2018/1128/212.html

Unity AudioSourceManager (一行代码播放指定BGM)

此脚本是我们常州手机游戏开发培训-幻天网络继上次发布的管理脚本新增的一些内容

可以 现在可以播放长音效

比如BGM 创建不销毁 自动循环

短音效如 按键声音 播放完毕自动删除 等功能

 

using System.Collections;

using System.Collections.Generic;

using DevelopEngine;

using UnityEngine;

 

/// <summary>

/// 音频管理脚本

/// </summary>

public class AudioSourceManager : MonoBehaviour

{

    private static AudioSourceManager _instance;

 

    private static AudioSourceManager Instance

    {

        get { return _instance; }

    }

 

    private void Awake()

    {

        _instance = this;

    }

 

    private AudioSource audioSource;

    private List<AudioSource> audioSourceList = new List<AudioSource>();

 

    /// <summary>

    /// 调用测试

    /// </summary>

    private void Test()

    {

        //TODO 音频文件需要放在  Resources/Music  下方  BMG为文件名  

        PlayAudio("BGM");

    }

 

 

    /// <summary>

    /// 调整音效时更新音量

    /// </summary>

    public void UpdateAudioVal()

    {

        foreach (AudioSource val in audioSourceList)

        {

            //便利所有的Bgm ,设置音量

            if (val)

            {

                val.volume = PlayerPrefs.GetFloat("BgmVal");

            }

           

        }

    }

 

    /// <summary>

    /// 删除指定音效

    /// </summary>

    /// <param name="audioName">被删除的音乐</param>

    public void DeleteAudio(string audioName)

    {

        foreach (AudioSource val in audioSourceList)

        {

            if (val&& val.clip.name == audioName)

            {

                //audioSourceList.Remove(val);

                Destroy(val.gameObject);

                

            }

        }

    }

 

    /// <summary>

    /// 音乐暂停

    /// </summary>

    /// <param name="isStop">是否暂停</param>

    public void StopAudio(bool isStop)

    {

        foreach (AudioSource val in audioSourceList)

        {

            if (isStop && val)

            {

                val.Pause();

            }

            else if (val)

            {

                val.Play();

            }

        }

 

    }

 

    /// <summary>

    /// 判断当前音乐是否存在

    /// </summary>

    /// <param name="audioName">音乐名字</param>

    /// <returns></returns>

    public bool AudioIsTrue(string audioName)

    {

        foreach (AudioSource val in audioSourceList)

        {

            if (val && val.clip.name == audioName)

            {

                return true;

            }

       

        }

        return false;

    }

 

 

    /// <summary>

    /// 音乐播放方法

    /// </summary>

    /// <param name="name">音乐名字</param>

    /// <param name="type">1是短音效 0是背景音乐</param>

    /// <param name="DontDestroy">是否不删除</param>

    public void PlayAudio(string name, int type = 1,bool DontDestroy = false)

    {

        //创建一个空物体

        GameObject obj = new GameObject();

        if (DontDestroy)

        {

            DontDestroyOnLoad(obj);

        }

        //给空物体添加音效

        audioSource = obj.AddComponent<AudioSource>();

        //加载音效

        AudioClip au = Resources.Load<AudioClip>("Music/" + name);

        //赋值

        audioSource.clip = au;

        //如果是Bgm

        if (type == 0) 

        {

            audioSource.loop = true;

            audioSource.volume = PlayerPrefs.GetFloat("BgmVal");

            //如果是长音效 将音效添加到List

            audioSourceList.Add(audioSource);

        }

        else

        {

            //获取音量

            audioSource.volume = PlayerPrefs.GetFloat("SoundVal");

            //如果是短音效播放完销毁自己

            StartCoroutine(RemoAudio(obj, audioSource));

        }

 

        //开始播放音效

        audioSource.Play();

        

    }

    /// <summary>

    /// 销毁音效

    /// </summary>

    /// <param name="obj"></param> 

    /// <param name="audioClip"></param>

    private IEnumerator RemoAudio(GameObject obj, AudioSource audioClip)

    {

        if (audioClip && obj)

        {

            yield return new WaitForSeconds(audioClip.clip.length);

            Destroy(obj);

        }

       

    }

 



上篇:上一篇:Unity两中方式加载图片
下篇:下一篇:c#引用类型与值类型的区别大盘点