Unity 音效管理器编辑窗口的创建和Manager的创建

一、音效管理器面板的创建
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);
}
}
结束。
最后脚本可以参见:这里写链接内容

猜你喜欢

转载自blog.csdn.net/qq_38456478/article/details/80282933