本文为参考大佬的代码,进行自定义修改,更适合自己使用,有待完善,仅供参考交流


====>>>>>>Unity_C# "面向对象"思想,独立操作,拒绝藕合

public class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T>
{private static T instance;public static T Instance{//只读单例get{if (instance == null) {//创建新Obj 命名和类名一样,并添加对应管理脚本,省去挂载过程GameObject obj = new GameObject(typeof(T).Name);instance = obj.AddComponent<T>();}return instance;}}protected virtual void Awake(){instance = this as T;}
}
//泛型单例类,通用,此处不是重点
public class Singleton<T> where T : new()
{private static T instance;public static T Instance{get{if (instance == null){instance = new T();}return instance;}}
}
//资源加载工具
public class ResourcesTool : Singleton<ResourcesTool>
{public T ResourcesLoad<T>(object objName) where T : Object{string objFilePath = string.Empty;//根据枚举获取对应资源路径switch (objName.GetType().Name){case "Audio_BGMusic":objFilePath = "Audios/BGMusic/" + objName.ToString();break;case "Audio_UI":objFilePath = "Audios/UI/" + objName.ToString();break;case "Panel_Person":objFilePath = "Panels/Person/" + objName.ToString();break;default:break;}//Debug.Log("objFilePath:" + objFilePath);//根据路径加载资源return LoadObj<T>(objFilePath);}private static readonly Dictionary<string, object> objDic = new Dictionary<string, object>();/// <summary>/// 动态加载资源/// </summary>public T LoadObj<T>(string path) where T: Object{if (!objDic.TryGetValue(path, out object obj)){obj = Resources.Load<T>(path);objDic.Add(path, obj);}return obj as T;}
}
public class EnumResources
{public enum Audio_BGMusic{None,FamilyBg,}public enum Audio_UI{None,ExitAudio,BtnClick,}public enum Panel_Default{None,EnterPanel,ExitPanel,}
}
//音频管理类
public class AudioController : MonoSingleton<AudioController>
{public AudioSource Aud_BGMusic { get; set; }public AudioSource Aud_Effect { get; set; }public AudioSource Aud_UI { get; set; }private Coroutine curCoroutine = null;protected override void Awake(){base.Awake();//Debug.Log("测试名字:"+gameObject);//Aud_Effect可做平常语音提示,也可和Aud_UI合并一个AudioSource,根据个人需要自行修改Aud_Effect = gameObject.AddComponent<AudioSource>();Aud_Effect.loop = false;Aud_Effect.playOnAwake = false;Aud_UI = gameObject.AddComponent<AudioSource>();Aud_UI.loop = false;Aud_UI.playOnAwake = false;Aud_BGMusic = gameObject.AddComponent<AudioSource>();Aud_BGMusic.loop = false;Aud_BGMusic.playOnAwake = false;        }public void PlayBGMusic(object bgMusic, bool isRestart = false, bool isLoop = false, float volume = 1.0f){PlayAudioClip(Aud_BGMusic, bgMusic, null, isRestart, isLoop);}public void PlayEffect(object objName, UnityAction CallBack = null, bool isRestart = false){PlayAudioClip(Aud_Effect, objName, CallBack, isRestart, false);}    public void PlayUI(object audioUI, float volume = 1.0f){PlayUIObj(Aud_UI, audioUI, volume);}public void StopAudio(AudioSource audioSrc){audioSrc.Stop();}private void PlayAudioClip(AudioSource audioSrc, object objName, UnityAction CallBack = null, bool isRestart = false, bool isLoop = false, float volume = 1.0f){if (isLoop)audioSrc.loop = true;elseaudioSrc.loop = false;string currentClipName = string.Empty;if (audioSrc.clip != null)currentClipName = audioSrc.clip.name;AudioClip clip = ResourcesTool.Instance.ResourcesLoad<AudioClip>(objName);if (clip != null){   //判断是否同一个音频要重新播放if (currentClipName == clip.name && !isRestart)return;audioSrc.clip = clip;audioSrc.volume = volume;audioSrc.Play();if (CallBack != null){if (curCoroutine != null){StopCoroutine(curCoroutine);curCoroutine = null;}curCoroutine = StartCoroutine(IeDelay(clip.length, CallBack));}}else{Debug.Log("Audio is Null");}}private IEnumerator IeDelay(float time, UnityAction CallBack){yield return new WaitForSeconds(time);CallBack?.Invoke();}private void PlayUIObj(AudioSource audioSrc, object objName, float volume = 1.0f){AudioClip clip = ResourcesTool.Instance.ResourcesLoad<AudioClip>(objName);if (clip == null){Debug.Log("Audio is null");return;}           audioSrc.PlayOneShot(clip, volume);}//再有特殊分类冲突,直接调用可播放:AudioSources.PlayClipAtPoint(ResourcesTool.Instance.ResourcesLoad<AudioClip>(objName));//PlayCkipAtPoint 适合播放3D音效,每次播放创建一AudioSource,播放完即释放掉
}
//需要动态创建面板时(尤其是相似面板)
public class PanelController : MonoSingleton<PanelController>
{public Transform CurPanel { get; set; }private string lastPanelName;public void CreatePanel(object objName, Transform parent, string title = null, bool isRestart = false){CreatePanelObj(objName, parent, title, isRestart);}private void CreatePanelObj(object objName, Transform parent, string title = null, bool isRestart = false){Transform panel = ResourcesTool.Instance.ResourcesLoad<Transform>(objName);if (panel != null){   //判断是否同一个面板要重新创建if (lastPanelName == panel.name && !isRestart)return;elselastPanelName = panel.name;//面板实例化CurPanel = Instantiate(panel);            //面板位置设置CurPanel.SetParent(parent);CurPanel.localPosition = Vector3.zero;CurPanel.localEulerAngles = Vector3.zero;CurPanel.localScale = Vector3.one;if (CurPanel.GetComponent<RectTransform>() != null){CurPanel.GetComponent<RectTransform>().sizeDelta = Vector2.zero;}if (CurPanel.Find("Title") != null){CurPanel.Find("Title").GetComponent<Text>().text = title;}}else{Debug.Log("Panel is Null");}}
}

音频/面板资源管理器_AudioPanelManager相关推荐

  1. 计算机导航窗格里没有桌面,win10系统资源管理器导航面板没有桌面项的教程

    win10系统使用久了,好多网友反馈说win10系统资源管理器导航面板没有桌面项的问题,非常不方便.有什么办法可以永久解决win10系统资源管理器导航面板没有桌面项的问题,面对win10系统资源管理器 ...

  2. Vscode 修改左侧 资源管理器的面板大小

    在Visual Studio Code的安装目录下依此找到 Microsoft VS Code\resources\app\out\vs\workbench\ 目录下的workbench.main.c ...

  3. WPF实现Windows资源管理器(附源码)

      今天我来写一篇关于利用WPF来实现Windows的资源管理器功能,当然只是局部实现这个功能,因为在很多时候我们需要来实现对本机资源的管理,当然我们可以使用OpenFileDialog dialog ...

  4. 扩展Visual Studio 2010服务器资源管理器中的SharePoint结点

    Visual Studio 2010最大的卖点就是可扩展性.这样就可以借助.NET社区的力量基于VS构建出许多有用的工具.本文中我们将展示如何扩展VS2010的服务器资源管理器,在其中的SharePo ...

  5. 【推荐】介绍两款Windows资源管理器,Q-Dir 与 FreeCommander XE(比TotalCommander更易用的免费资源管理器)...

    你是否也像我一样,随着硬盘.文件数量的增加,而感到对于文件的管理越来越乏力. 于是我试用了传说中的各种软件,包括各种Explorer外壳,或者第三方资源管理器. 最后我确定下来经常使用,并推荐给您的是 ...

  6. qdir 类似工具_qdir 类似工具_支持 Win8.1,全能资源管理器 Q-Dir 5.74 发布

    Q-Dir是一款帮助用户管理本地文件和文档的工具.支持快速访问定位本地磁盘.网络驱动器.USB移动设备及其他存储设备中的文件或文档.依靠强大的Quadro-View技术,使得Q-Dir成为一款优秀的文 ...

  7. qtwebengineprocess已停止工作_windows资源管理器总是停止工作

    一. 在 Windows 中工作时,你可能会收到以下错误消息: Windows 资源管理器已停止工作. Windows 正在重启 此外,你可能会在错误消息出现前后注意到屏幕闪烁. 二. 当出现wind ...

  8. CMFCShellTreeCtrl和CMFCShellListCtrl快速构建资源管理器

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 系统环境 ...

  9. QNX系列:五、资源管理器(1)官方文档的翻译

    文章目录 @[toc] 资源管理器 什么是资源管理器? 资源管理器示例 串行端口 文件系统 资源管理器的特征 client的观点 查找服务器 寻找流程经理 处理目录 联合文件系统 client总结 资 ...

最新文章

  1. Hive动态分区导致的Jobtracker Hang
  2. 构造数独 算法及代码实现
  3. 疾风之刃的最新服务器,疾风之刃6月16日数据互通公告 数据互通服务器查询介绍...
  4. mysql数据库+ssh框架_SSH框架+Mysql数据库开发java web会员积分消费管理系统
  5. python安装Scrapy踩过的坑以及安装指导
  6. java文件快速扫描仪_Java扫描仪具有示例的NextNextShort()方法
  7. extjs曲线数据如何从后端获取_B端产品经理应了解的技术知识(上)
  8. 交叉表 mysql_MySql交叉表
  9. 《通信原理》复习笔记4----第四章信道相关例题
  10. 电脑使用技巧提升篇2:修改电脑桌面固定图标
  11. 计算机继电保护书籍,电力网络继电保护的计算机整定计算
  12. java编程比赛_[阶段一]java基础编程比赛
  13. SRE Google运维解密——第二章Goolgle的生成环境介绍
  14. te40终端不设网关_默认网关不可用什么原因|默认网关不能用解决方法|默认网关怎么设置...
  15. python if用法
  16. 安卓APP开发日记1——名为Another的日记APP开发
  17. springboot中websocket服务怎么调用其他类的方法
  18. 怎么把计算机e盘的文件移动到d盘,怎么把d盘的东西移到e盘
  19. win10 + cmd常见命令的使用
  20. iconfont在ie8下不显示图标问题

热门文章

  1. 计算机丢失fine,FineRecovery(文件恢复删除)4.29
  2. mysql 危险字符_PHP过滤指定字符串,过滤危险字符
  3. 51单片机实验(LED and KEY)
  4. v-text与v-html,v-text,v-html等区别
  5. modbus4j.jar实现modbus urt模式
  6. nginx——反向代理,https加密证书,重定向
  7. chrome图片下载插件
  8. ionic3 添加蒙版,弹出悬浮框
  9. 文献阅读笔记 # Bitcoin: A Peer-to-Peer Electronic Cash System
  10. matlab的空间坐标轴,空间三维坐标轴旋转