Unity音频管理类

一个音频管理类吧!

/***********************
 * Title:   "音频管理类(简单)"
 * Func:    
 * -     新建一个空物体AudioManager,挂载此脚本
 * UsedBy:  
 * Date:    2017.
 * Author:  V.
 * Version: 1.0
 * Description:
 ***********************/
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class AudioManager : MonoBehaviour 
{
    public AudioClip[] AudioClipArray;                      //音频剪辑的数组
    private static Dictionary _DicAudio; //音频库(音频剪辑)字典
    private static AudioSource _ASBGM;                      //背景音乐的音频源

    private static GameObject _Instance;                    //挂载着个脚本的游戏对象
    void Awake ()
    {
        _Instance = this.gameObject;

        _DicAudio = new Dictionary();    //为音频库分配空间
        //加载所有的音频,加载音频库
        foreach (var item in AudioClipArray)                
        {
            _DicAudio.Add(item.name, item);    //把音频剪辑数组里所有的音频剪辑的名字和音频本身放入音频字典
        }
        //指定背景音乐的音频源
        _ASBGM = _Instance.AddComponent();
       
    }//end_Start
    public static void BGMPlay(AudioClip ac)
    {
        if (ac)
        {
            _ASBGM.clip = ac;
            _ASBGM.loop = true;
            _ASBGM.Play();
        }
    }
    public static void BGMPlay(string acName)
    {
        //当传进来的名字不为空且在音频库中
        if (_DicAudio.ContainsKey(acName)&&!string.IsNullOrEmpty(acName))
        {
            AudioClip ac = _DicAudio[acName];
            BGMPlay(ac); //调用上面重载方法
        }
    }
    public static void PlayEffect(AudioClip ac)
    {
        if (ac)
        {
            AudioSource[] asArray = _Instance.GetComponents();

            for (int i = 1; i < asArray.Length; i++)
            {
                if (!asArray[i].isPlaying)
                {
                    asArray[i].loop = false;
                    asArray[i].clip = ac;
                    asArray[i].Play();
                    return;
                }
            }
            //当没有多余的音频源可以使用的时候
            AudioSource newAs = _Instance.AddComponent();
            newAs.loop = false;
            newAs.clip = ac;
            newAs.Play();
        }
    }
    public static void PlayEffect(string acName)
    {
        //当传进来的名字不为空且在音频库中
        if (_DicAudio.ContainsKey(acName) && !string.IsNullOrEmpty(acName))
        {
            AudioClip ac = _DicAudio[acName];
            PlayEffect(ac); //调用上面重载方法
        }
    }
}

你可能感兴趣的:(Unity音频管理类)