---Audio编辑器制作步骤
1.由于要制作编辑器,肯定是要绘制的,所以先引入using UnityEditor;(我们视情况而定,可能用到GUILayout和EditorGUILayout)
2.流程:(1)在扩展界面输入音频名和路径-->(2)通过一个字典进行方便的操作,并且对那些需要更改的操作存储到文本中,方便再次读取(3)-->通过音频管理器加载音频并对音频进行操作
一共需要两个脚本,一个编辑器脚本(AudioWindowsEditor),用来进行存储新的音频文件或者删除,修改,查看等功能
,一个音频管理器脚本(AudioManager),用来加载,播放,暂停音乐,两者的交互点是一个音频的可持续化文件,里面存储了路径和名称
//编辑器
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
public class AudioWindowsEditor : EditorWindow
{
private string m_name;
private string m_path;
[MenuItem("Manager/AudioManager")]
static void CreateWindow()
{
//Rect rect = new Rect(400, 400, 400, 400);
//AudioWindowsEditor window = EditorWindow.GetWindow(typeof(AudioWindowsEditor)) as AudioWindowsEditor;
AudioWindowsEditor window = EditorWindow.GetWindow<AudioWindowsEditor>("音效管理");
window.Show();
}
void Awake()
{
pathDic = new Dictionary<string, string>();
_LoadAudioPath();
}
//绘制面板
private Dictionary<string, string> pathDic;
void OnGUI()
{
//开始水平布局
GUILayout.BeginHorizontal();
GUILayout.Label("音效名称");
GUILayout.Label("音效路径");
GUILayout.Label("操作");
GUILayout.EndHorizontal();
if (pathDic == null)
{
pathDic = new Dictionary<string, string>();
}
foreach (var item in pathDic)
{
GUILayout.BeginHorizontal();
GUILayout.Label(item.Key);
GUILayout.Label(item.Value);
if (GUILayout.Button("操作"))
{
pathDic.Remove(item.Key);
_SaveAudioPath();
return;
}
GUILayout.EndHorizontal();
}
//GUILayout
m_name = EditorGUILayout.TextField("name", m_name);
m_path = EditorGUILayout.TextField("path", m_path);
if (GUILayout.Button("save path"))
{
//按照他所给的路径加载音效
object o = Resources.Load(m_path);
if (o == null)
{
Debug.LogWarning("音效不存在");
}
else
{
if (pathDic == null)
{
pathDic = new Dictionary<string, string>();
}
if (pathDic.ContainsKey("name"))
{
Debug.LogError("The pathDic have 重复 value");
}
else
{
pathDic.Add(m_name, m_path);
_SaveAudioPath();
}
}
//在foreach内进行删除元素操作可能会产生影响
}
}
//1s10次,有够多
void OnInspectorUpdate()
{
_LoadAudioPath();
}
//对文件进行存储操作,也就是增删改查,如果只是追加的话不妥当,
void _SaveAudioPath()
{
StringBuilder sb = new StringBuilder();
foreach (var item in pathDic)
{
sb.Append("name:" + item.Key + ",path:" + item.Value + "\n");
}
File.WriteAllText(AudioManager.m_loadAudioPath, sb.ToString());
}
//对文件进行读取操作并加载到编辑器界面
void _LoadAudioPath()
{
if (!File.Exists(AudioManager.m_loadAudioPath)) { return; }
else
{
//TODO 这里面每0.1S都要执行一次pathDic和添加操作,应该吧所有操作放在一个类中,然后再每次操作之后再加载所有资源
if(pathDic!=null)
pathDic.Clear();
string m_pattern = @"name:|,path:";
//的确是可能产生这样的错误的
//StreamReader sr = new StreamReader(m_AudioLoadPath);
string[] lines = File.ReadAllLines(AudioManager.m_loadAudioPath);
foreach (string item in lines)
{
if (item == "") break;
string[] keyvalue = Regex.Split(item, m_pattern);
pathDic.Add(keyvalue[1], keyvalue[2]);
}
}
}
}
//音频管理器
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
using UnityEngine;
public class AudioManager
{
private static string m_resourcesPath = Application.dataPath + "\\Resources";
private const string m_audioPathText = "\\AudioList.txt";
public static string m_loadAudioPath = m_resourcesPath + m_audioPathText;
private Dictionary<string, AudioClip> m_audioClipDic;
public void _Init()
{
m_audioClipDic = new Dictionary<string, AudioClip>();
_LoadAllAudioClip();
}
//将文本中的信息(名称和资源路径加载到字典中进行保存
private void _LoadAllAudioClip()
{
m_audioClipDic.Clear();
TextAsset ta = Resources.Load<TextAsset>("AudioList");
if (ta == null)
{
Debug.LogWarning("ta is null");
return;
}
string pattern = @"name:|,path:";
//这里采用这种方法\n将一个文本文件切割成好几部分,学习
string[] lines = ta.text.Split('\n');
foreach (var item in lines)
{
if (item == "") break;
string[] keyvalue = Regex.Split(item, pattern);
//这一种切割方式:一共有三个字段: "","4","Audio/1",所以keyvalue[1]和[2]才是我们的目标
m_audioClipDic.Add(keyvalue[1], Resources.Load(keyvalue[2]) as AudioClip);
}
}
private bool isMute = false;
//通过名称获取字典中的音频资源文件并进行播放
public void _PlayAudio(string name)
{
if (isMute) return;
AudioClip ac;
m_audioClipDic.TryGetValue(name, out ac);
if (ac != null)
{
AudioSource.PlayClipAtPoint(ac, Vector3.zero);
}
}
}
---Audio编辑器制作步骤相关推荐
- 如何使用CocoStudio场景编辑器制作魔卡幻想
1 CocoStudio 场景编辑器 使用 CocoStudio 场景编辑器来创建游戏场景,其中包含游戏 UI 与动画,来定制一个游戏主界面. 2 使用 CocoStudio 完成<魔卡幻想&g ...
- 二、Qt定时器与文本编辑器制作《QT 入门到实战》
学习目标 了解 qt 的 pixmap 了解 qt 的 label 如何显示图片 了解定时器的开启 了解定时器的关闭 了解文件如何进行读取 了解 QFileDialog 的使用 了解了一个文本编辑器的 ...
- 【cocos2d-x】如何使用CocoStudio场景编辑器制作魔卡幻想
1 CocoStudio 场景编辑器 使用 CocoStudio 场景编辑器来创建游戏场景,其中包含游戏 UI 与动画,来定制一个游戏主界面. 2 使用 CocoStudio 完成<魔卡幻想&g ...
- 微电影宣传片制作步骤分享。
微电影宣传片制作步骤分享. 在如今这个视频产业迅速发展的时期,微电影也作为其中一个重要组成部分在近几年得到了飞速的发展.现在拍摄的成本被放低,每个人几乎都拥有可以拍摄的东西.因为微电影之制作简单,拍摄 ...
- 360°全景图制作步骤和技巧有哪些?
360°全景图在过去加几年一直没有好的发展,但是由于这次新冠疫情的影响,使得360°全景图再次让更多的人知道, 360°全景图可以让客户有一种身临其境的感觉,还有一定的交互性,因此要比一般的宣传媒介受 ...
- php下雨效果源码,ps下雨效果制作步骤
ps下雨效果制作步骤:首先打开ps软件,并导入一张图片素材:然后新建一个透明图层,并选择填充工具,将填充图层为白色:接着点击菜单栏的滤镜选项,并在弹出的列表选择像素化:最后在点状化的设置窗口中调整参数 ...
- 用计算机做动画效果,动画图片多种效果制作步骤
动画图片多种效果制作步骤:文字绕月旋转做法 <一>打开FLASH软件,设置版面及导入背景图片,按图解进行,并在35帧处插入帧 . 当这些操作完后与平时在办公软件打字一样,打一部分就保存,这 ...
- 微信小程序开发难?资深大V教您微信小程序制作步骤和方法
微信小程序开发难?资深大V教您微信小程序制作步骤和方法 一.登录微信公众平台 就能在菜单"开发"---"基本配置"中看到小程序的AppID了,小程序的 Ap ...
- 【Dash搭建可视化网站】项目13:销售数据可视化大屏制作步骤详解
销售数据可视化大屏制作步骤详解 1 项目效果图 2 项目架构 3 文件介绍和功能完善 3.1 assets文件夹介绍 3.2 app.py和index.py文件完善 3.3 header.py文件完善 ...
最新文章
- hdu 1254(dfs+bfs+优先队列)
- Redis AOF带来的问题
- android daemon 程序,(转)Android App Daemon
- 铜仁计算机专业学校,听说计算机专业的在本部啊 这是真的么
- sas一元回归分析_商业分析的应用
- 8块钱搞定一个顶级域名 (全过程) B篇
- 【限时免费】架构和运维技术高峰论坛 (成都站)
- 把GBK源码文件转UTF8的JAVA代码说明
- c# Quartz使用
- w10 桌面计算机垃圾桶,win10垃圾桶图标不见了怎么办
- 2007版的office软件下载及简介
- 【Excle】在方框内打勾
- ssm框架 mysql 一对多_ssm2: :sparkles: 基于SSM框架简单的文章管理系统,使用MySQL多表存储方式实现留言回复功能...
- 第十三弹 服务数据的定义与使用
- windows命令行工具
- Python-opencv实现Trackbar调节亮度对比度
- 微信‘小程序’: web前端的春天 or 噩梦?
- 安卓巴士总结了近百个Android优秀开源项
- 【下载Tomcat旧版本】
- Python实现数字图像处理之5种彩色空间转换(单图+多图+视频)
热门文章
- 多媒体基础知识思维导图
- 游戏工作室使用的手机多控系统
- 冉有-支付宝钱包的研发挑战和最佳实践
- Excel表格数据不能编辑?
- 【Linux】ubuntu或linux网卡配置/etc/network/interfaces【转】
- PTA(每日一题)7-16 jmu-分段函数l
- mediapipe——人体姿势关节点检测(pose模块) 学习笔记(全)
- 真实的硅谷到底什么样?这些漫画告诉你!
- 计算机大学生夏令营广告语,武汉大学计算机学院2016年优秀大学生暑期夏令营活动实施方案...
- 放蛋糕,字符串转换成整数