一、音效管理器面板的创建
1.首先要继承EditorWindow,然后再静态方法里创建窗口编辑器。
[MenuItem(“Manager/AudioManager”)]
static void CreateWindow()
{
Rect rect = new Rect(400, 400, 300, 300);
AudioWindowEditor window = EditorWindow.GetWindowWithRect(typeof(AudioWindowEditor), rect) as AudioWindowEditor;//不可伸缩窗口
AudioWindowEditor window = EditorWindow.GetWindow(“音效管理”);
window.Show();//可伸缩窗口
}
2.上面步骤窗口已经建立。用OnGUI绘制窗口显示内容。
1)创建头标题,创建布局
GUILayout.BeginHorizontal();
GUILayout.Label(“音效名称”);
GUILayout.Label(“音效路径”);
GUILayout.Label(“删除操作”);
GUILayout.EndHorizontal();
2)添加音效
首先要声明一个音效名字和音效地址,和一个集合来粗存他们
private string audioName;
private string audioPath;
private Dictionary string, string> audioDict = new Dictionary string, string>();
添加音效,需要绘制输入框来填写名字和地址。
if (GUILayout.Button(“添加音效”))
{
object o = Resources.Load(audioPath);
if (o == null)
{
Debug.LogWarning(“音效不存在于” + audioPath + “添加不成功”);
audioPath = “”;
}
else
{
if (audioDict.ContainsKey(audioName))
{
Debug.LogWarning(“名字已经存在,请修改!”);
}
else
{
audioDict.Add(audioName, audioPath);
// SaveAudioList();
}
}
上面结束所呈现的是如图:

3.添加删除按钮,可以操作删除添加错的音效
foreach (string key in audioDict.Keys)
{
string value;
audioDict.TryGetValue(key, out value);
GUILayout.BeginHorizontal();
GUILayout.Label(key);
GUILayout.Label(value);
if (GUILayout.Button(“删除音效”))
{
audioDict.Remove(key);
SaveAudioList();
return;
}
GUILayout.EndHorizontal();
}
以上步骤操作完成基本结束。
我们还需要添加的音效保存到txt文本中,以便读取方便
private void SaveAudioList()
{
StringBuilder sb = new StringBuilder();
foreach (string key in audioDict.Keys)
{
string value;
audioDict.TryGetValue(key, out value);
sb.Append(key + “,” + value + “\n”);
}
File.WriteAllText(注:这里是你需要的路径地址,放在resources下面好被调用, sb.ToString());//将编辑器中的资源写进文本中
}
上面有一个弊端就是当你退出编辑器的时候。在重新打开,里面的数据会丢失,所以我们要写一个方法来保存。
private void LoadAudioList()
{
audioDict = new Dictionarystring, string>();
if (File.Exists(AudioManager.AudioTextPath) == false) return;
string[] lines = File.ReadAllLines(AudioManager.AudioTextPath);
foreach (string line in lines)
{
if (string.IsNullOrEmpty(line)) continue;
string[] keyvalue = line.Split(‘,’);
audioDict.Add(keyvalue[0], keyvalue[1]);
}
}然后把这个放在合适的地方去调用
这样编辑器编写完成。如下


二、音效管理器播放
1.实际上也就是加载txt里面的地址,以访问名字来播放。
需要一个字典将其储存
private Dictionary string, AudioClip> audioClipDict = new Dictionary string, AudioClip>();
然后读取
private void LoadAudioClip()
{
audioClipDict = new Dictionary string, AudioClip>();
TextAsset ta= Resources.Load TextAsset>(注;这里是txt的名字,不带后缀);
string[] lines = ta.text.Split(‘\n’);
foreach (string line in lines)
{
if (string.IsNullOrEmpty(line))
{
continue;
}
string[] keyvalue = line.Split(‘,’);
string key = keyvalue[0];
AudioClip value = Resources.Load(keyvalue[1]);
audioClipDict.Add(key,value);
}
}将其在Awake里面调用。。
播放 ,以读取名字播放
public void Play(string name)
{
if (isMute)
{
return;
}
AudioClip ac;
audioClipDict.TryGetValue(name,out ac);
if (ac!=null)
{
AudioSource.PlayClipAtPoint(ac,Vector3.zero);
}
}
结束。
最后脚本可以参见:这里写链接内容

Unity 音效管理器编辑窗口的创建和Manager的创建相关推荐

  1. unity音效管理器

    unity游戏制作时,经常需要播放音效,如果没有一个音效管理类,随时随地都可以播放音乐,不利于代码的管理.我们可以将所有关于音效集中到一个管理类当中,可以将这个音效管理器写成单例,也可以将它当作一个模 ...

  2. unity音效管理器实现(二)之美

    using System.Collections; using System.Collections.Generic; using UnityEngine; /* 功能:用来对项目中的所有音频做同一的 ...

  3. U3D客户端框架之 音效管理器 与 Fmod介绍安装导入Unity

    一.Fmod介绍与安装导入Unity 1.Fmod与Unity内置Audio播放器对比 Unity内置的Audio底层使用的是FMOD,但是功能不够齐全,高级一点的功能如混合(Mix)等无法使用: 音 ...

  4. 【Unity植物大战僵尸】音效管理器开发(二十四)

    42.音效管理器开发 导入资源 整理一下GameManager.cs,因为这个脚本要在两个场景中都共用,所以需要把CurrLV相关的移植到LVManager.cs中去,这里就不显示了,说下如何共用,首 ...

  5. CocosCreator 音效管理器

    代码都有注释不再赘述 import { _decorator, Node, AudioClip, AudioSource, game, find } from "cc"; impo ...

  6. OneAlive--游戏音效管理器

    /* 游戏音效管理器* 功能:管理游戏中音效的播放和声音的调节* audioSourceBG是背景(2D)音乐,挂在相机上即可* gamesound是游戏音效(3D)挂在人物角色身上*/using S ...

  7. ATF原生篇(十八):Components-安全分区管理器(MM)(Secure Partition Manager (MM))(上)

    安全分区管理器(MM)(Secure Partition Manager (MM)) 1 前言 安全分区管理器的两个实现在TF-A代码库中共存: SPM基于FF-A规范(安全分区管理器). SPM基于 ...

  8. Unity 项目中的音效管理器

    using UnityEngine; using System.Collections; using System.Collections.Generic;/// <summary> // ...

  9. Unity 音效管理

    创建一个音效管理脚本, 把想要播放的音效放在Resources目录下,需要播放的时候一行代码就可以搞定 话不多说,看脚本 using System.Collections; using System. ...

最新文章

  1. 论文不公开代码,应该被直接拒稿?
  2. WEB前端:浏览器(IE+Chrome+Firefox)常见兼容问题处理【01】
  3. 【数据结构与算法】之双向链表的创建/遍历/插入/删除/查找的算法实现
  4. PAT1054 求平均值 (20 分)【从非法输入字符串中获取合法输入 cin.putback()】
  5. 【测试点分析】1035 Password (20 分)
  6. String类的构造与析构相关处理
  7. QT5开发及实例学习之八基本对话框(一)
  8. header()函数使用说明
  9. jq判断是否为整数_jquery怎么判断是否是数字?
  10. 简谈Java的join()方法(转)
  11. break lab c语言,C语言printf详解
  12. 为什么计算机报名无法选择福建,2020年9月福建计算机考试如何报名
  13. 关于Multi-bin实现的一些翻译
  14. python读取、写入txt文本内容
  15. app 要求字体使用楷体,使用字体包
  16. 银行管理系统实例(C语言版)
  17. 手机如何在线图片识别?3大教程,一键轻松图片转文字
  18. DeFi引入真实资产质押,到底靠谱吗?
  19. HBuilder开发App
  20. Mac运行pyinstaller打包exe 提示 command not found的终极解决办法!

热门文章

  1. python计算趋肤深度
  2. 以太坊 2.0 :双生以太奇谭
  3. itertools.chain()
  4. Java调用SMSLib发送短信具体解释
  5. 广域网技术(CCIE魔鬼训练营系列)-陈鑫杰-专题视频课程
  6. [知了堂学习笔记]_Java中线程的学习(一)
  7. 6套粒子群算法(内含matlab代码)
  8. 从零开始实现lmax-Disruptor队列(二)多消费者、消费者组间消费依赖原理解析
  9. Matlab 并行计算及GPU计算
  10. 历史的真相很“残酷”