音效管理类和资源管理类

来源:互联网 发布:plsql随机抽取数据 编辑:程序博客网 时间:2024/06/16 11:51
单例:单例形式有两种,一种是继承mono的单例,一种是不继承mono的单例继承mono的单例using UnityEngine;using System.Collections;public abstract class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T>{#region 单例private static T instance;public static T Instance {get {if (instance == null) {GameObject obj = new GameObject (typeof(T).Name);instance = obj.AddComponent<T> ();}return instance;}}#endregionprotected virtual void Awake (){instance = this as T;}}不继承mono的单例using UnityEngine;using System.Collections;public abstract class Singleton<T> : System.IDisposable where T : new(){private static T instance;public static T Instance {get {if (instance == null) {instance = new T ();}return instance;}}public virtual void Dispose (){}}
音效管理类using UnityEngine;using System.Collections;public class MusicMgr : MonoSingleton<MusicMgr>{// 播放背景音乐private AudioSource m_bgMusic;// 播放音效private AudioSource m_effectMusic;// 控制音量大小public float BgVolume {get{ return m_bgMusic.volume; }set{ m_bgMusic.volume = value; }}public float EffectVolmue {get{ return m_effectMusic.volume; }set{ m_effectMusic.volume = value; }}protected override void Awake (){base.Awake ();m_bgMusic = gameObject.AddComponent<AudioSource> ();m_bgMusic.loop = true;m_bgMusic.playOnAwake = false;m_effectMusic = gameObject.AddComponent<AudioSource> ();m_effectMusic.loop = true;m_effectMusic.playOnAwake = false;}// 播放背景音乐private void PlayBgBase (object bgName, bool restart = false){string curBgName = string.Empty;if (m_bgMusic.clip != null) {curBgName = m_bgMusic.clip.name;}// 根据用户的音频片段名称, 找到AuioClip, 然后播放AudioClip clip = ResourcesMgr.Instance.Load<AudioClip> (bgName);if (clip != null) {if (clip.name == curBgName && !restart) {return;}m_bgMusic.clip = clip;m_bgMusic.Play ();} else {// 异常, 调用写日志的工具类.UnityEngine.Debug.Log ("没有找到音频片段");}}public void PlayBg (MusicType.Feeds bgName, bool restart = false){PlayBgBase (bgName, restart);}public void PlayBg (MusicType.Items bgName, bool restart = false){PlayBgBase (bgName, restart);}public void PlayBg (MusicType.Main bgName, bool restart = false){PlayBgBase (bgName, restart);}public void PlayBg (MusicType.Monsters bgName, bool restart = false){PlayBgBase (bgName, restart);}public void PlayBg (MusicType.Towers bgName, bool restart = false){PlayBgBase (bgName, restart);}// 播放音效private void PlayEffectBase (object effectName, bool defAudio = true, float volume = 1f){AudioClip clip = ResourcesMgr.Instance.Load<AudioClip> (effectName);if (clip == null) {UnityEngine.Debug.Log ("没有找到音效片段");return;}if (defAudio) {m_effectMusic.PlayOneShot (clip, volume);} else {AudioSource.PlayClipAtPoint (clip, Camera.main.transform.position, volume);}}public void PlayEffect (MusicType.Feeds effectName, bool defAudio = true, float volume = 1f){PlayEffectBase (effectName, defAudio, volume);}public void PlayEffect (MusicType.Items effectName, bool defAudio = true, float volume = 1f){PlayEffectBase (effectName, defAudio, volume);}public void PlayEffect (MusicType.Main effectName, bool defAudio = true, float volume = 1f){PlayEffectBase (effectName, defAudio, volume);}public void PlayEffect (MusicType.Monsters effectName, bool defAudio = true, float volume = 1f){PlayEffectBase (effectName, defAudio, volume);}public void PlayEffect (MusicType.Towers effectName, bool defAudio = true, float volume = 1f){PlayEffectBase (effectName, defAudio, volume);}}资源管理类using UnityEngine;using System.Collections;// 通过用户传递进来的枚举值, 自动的分析出该枚举值对应的资源在哪个路径下.public class ResourcesMgr : Singleton<ResourcesMgr>{// 面向用的方法:/// <summary>/// 返回用户需要的资源./// </summary>/// <param name="enumName">Enum name.</param>/// <typeparam name="T">The 1st type parameter.</typeparam>public T Load<T> (object enumName) where T : Object{// 获取枚举类型的字符串形式string enumType = enumName.GetType ().Name;string filePath = string.Empty;switch (enumType) {case "Feeds":{filePath = "Music/Feeds/" + enumName.ToString ();break;}case "Items":{filePath = "Music/Items/" + enumName.ToString ();break;}case "Main":{filePath = "Music/Main/" + enumName.ToString ();break;}case "Monsters":{filePath = "Music/Monsters/" + enumName.ToString ();break;}case "Towers":{filePath = "Music/Towers/" + enumName.ToString ();break;}default:{break;}}return Resources.Load<T> (filePath);}}定义的枚举.用来存放音乐的string(把音频放在Resource文件夹下的Music下的Feeds文件夹下)public class MusicType{    public enum Feeds    {        BuyItem,        Feed01,            }    public enum Items    {        Ach,        BGMusic01,        BGMusic02,        BGMusic03,            }    public enum Main    {        Accomplish,        BGMusic,        }    public enum Monsters    {        BigBoss,        Fat141,                    }    public enum Towers    {        Anchor,        Arrow,        }}

//用来调用脚本
using UnityEngine;
using System.Collections;

public class GameController : MonoBehaviour
{

    void Update ()
    {
        if (Input.GetKeyDown (KeyCode.B)) {
            MusicMgr.Instance.PlayBg (MusicType.Main.BGMusic);
        }
        if (Input.GetKeyDown (KeyCode.E)) {
            MusicMgr.Instance.PlayEffect (MusicType.Towers.Bottle);
        }
    }


}

音频资源的配置

 

原创粉丝点击