音效管理类和资源管理类
来源:互联网 发布: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);
}
}
}
音频资源的配置
阅读全文
0 0
- 音效管理类和资源管理类
- 音效管理类
- 资源管理类
- 资源管理类
- 播放系统音效、自定义音效工具类
- 播放系统音效、自定义音效工具类
- flash as3 内存管理和资源管理
- (九十五)音效播放方法和工具类的制作
- Starling之资源管理类
- 图片资源管理类
- 一个音效播放类SoundManager
- 音效工具类的封装
- 【工具类篇------声音管理器(管理游戏的音乐音效)】
- 游戏音乐音效添加管理
- Unity 音效管理
- 精通C++资源管理-在资源管理类中小心coping行为
- 权限管理--权限资源管理
- 以对象管理资源、在资源管理类中小心coping行为、在资源管理类中提供对原始资源的访问
- mac平台Charles抓包 Android手机 https
- java对象与json对象间的相互转换
- fastjson使用(一) -- 最常用的功能[构造和解析JSON]
- jsp实现表格联动
- C++ Primer 练习答案 1.4节练习
- 音效管理类和资源管理类
- 固定宽度中,展示图片和旋转图片展示的实现姿势
- 一个 token 控件
- 软件测试方法------可以分为手工测试和自动化测试
- 笔记1--html基础知识
- 有关于office 2007 word和mathtpye 6.9之间容易报错的问题
- Subsequence HDU
- google 和 unixlite 的设计理念
- android进阶:理解RxJava2的调用原理