Unity編輯器擴充套件(音效控制面板,路徑增刪)
阿新 • • 發佈:2019-02-02
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using System.Text;
using System.IO;
public class MusicWindowEditor : EditorWindow {
private string audioName;
private string audioPath;
private Dictionary<string ,string> audioDic = new Dictionary<string,string>();
private string savePath = Application.dataPath + "\\AudioWindowFramework\\audioList.txt";
void Awake(){
Debug.Log(Application.dataPath);
}
void OnInspectorUpdate(){
ReloadAudioList();
}
[MenuItem("Manager/AudioManager")]
static void AddWindow(){
//Rect rect = new Rect(0, 0, 500, 500);
//MusicWindowEditor musicWindowEditor = (MusicWindowEditor)EditorWindow.GetWindowWithRect(typeof(MusicWindowEditor), rect);
MusicWindowEditor musicWindowEditor = EditorWindow.GetWindow<MusicWindowEditor>("音效管理");
musicWindowEditor.Show();
}
void OnGUI(){
GUILayout.BeginHorizontal();
GUILayout.Label("音效名稱");
GUILayout.Label("音效路徑");
GUILayout.Label("音效操作");
GUILayout.EndHorizontal();
foreach(string key in audioDic.Keys){ //顯示已新增
string value = null;
audioDic.TryGetValue(key, out value);
GUILayout.BeginHorizontal();
GUILayout.Label(key);
GUILayout.Label(value);
if (GUILayout.Button("刪除"))
{
audioDic.Remove(key);
AddAudioList();//更新
return;
}
GUILayout.EndHorizontal();
}
//顯示新增框
audioName = EditorGUILayout.TextField("音效名字",audioName);
audioPath = EditorGUILayout.TextField("音效路徑", audioPath);
if (GUILayout.Button("新增音效"))//被點選返回true
{
if (Resources.Load(audioPath) != null)
{
Debug.Log("新增音效成功");
if (!audioDic.ContainsKey(audioName))//防止重複,字典報錯
{
audioDic.Add(audioName, audioPath);
//TODO將音效新增到檔案
AddAudioList();
Debug.Log("Added");
}
}else{
Debug.Log("新增音效失敗");
}
}
}
public void AddAudioList(){
//audioDic.Clear();//清空
StringBuilder sb = new StringBuilder();
foreach(string key in audioDic.Keys){
string value = null;
audioDic.TryGetValue(key, out value);
sb.AppendLine( key + "," + value);
}
//將字串儲存成檔案
File.WriteAllText(savePath, sb.ToString());
// Application.dataPath;
}
public void ReloadAudioList(){
audioDic.Clear();
string[] audioList = File.ReadAllLines(savePath);
foreach (string line in audioList)
{
string[] keyAndValue = line.Split(',');
audioDic.Add(keyAndValue[0], keyAndValue[1]);
}
}
}
using UnityEditor;
using System.Collections.Generic;
using System.Text;
using System.IO;
public class MusicWindowEditor : EditorWindow {
private string audioName;
private string audioPath;
private Dictionary<string ,string> audioDic = new Dictionary<string,string>();
private string savePath = Application.dataPath + "\\AudioWindowFramework\\audioList.txt";
void Awake(){
Debug.Log(Application.dataPath);
}
void OnInspectorUpdate(){
ReloadAudioList();
}
[MenuItem("Manager/AudioManager")]
static void AddWindow(){
//Rect rect = new Rect(0, 0, 500, 500);
//MusicWindowEditor musicWindowEditor = (MusicWindowEditor)EditorWindow.GetWindowWithRect(typeof(MusicWindowEditor), rect);
MusicWindowEditor musicWindowEditor = EditorWindow.GetWindow<MusicWindowEditor>("音效管理");
musicWindowEditor.Show();
}
void OnGUI(){
GUILayout.BeginHorizontal();
GUILayout.Label("音效名稱");
GUILayout.Label("音效路徑");
GUILayout.Label("音效操作");
GUILayout.EndHorizontal();
foreach(string key in audioDic.Keys){ //顯示已新增
string value = null;
audioDic.TryGetValue(key, out value);
GUILayout.BeginHorizontal();
GUILayout.Label(key);
GUILayout.Label(value);
if (GUILayout.Button("刪除"))
{
audioDic.Remove(key);
AddAudioList();//更新
return;
}
GUILayout.EndHorizontal();
}
//顯示新增框
audioName = EditorGUILayout.TextField("音效名字",audioName);
audioPath = EditorGUILayout.TextField("音效路徑", audioPath);
if (GUILayout.Button("新增音效"))//被點選返回true
{
if (Resources.Load(audioPath) != null)
{
Debug.Log("新增音效成功");
if (!audioDic.ContainsKey(audioName))//防止重複,字典報錯
{
audioDic.Add(audioName, audioPath);
//TODO將音效新增到檔案
AddAudioList();
Debug.Log("Added");
}
}else{
Debug.Log("新增音效失敗");
}
}
}
public void AddAudioList(){
//audioDic.Clear();//清空
StringBuilder sb = new StringBuilder();
foreach(string key in audioDic.Keys){
string value = null;
audioDic.TryGetValue(key, out value);
sb.AppendLine( key + "," + value);
}
//將字串儲存成檔案
File.WriteAllText(savePath, sb.ToString());
// Application.dataPath;
}
public void ReloadAudioList(){
audioDic.Clear();
string[] audioList = File.ReadAllLines(savePath);
foreach (string line in audioList)
{
string[] keyAndValue = line.Split(',');
audioDic.Add(keyAndValue[0], keyAndValue[1]);
}
}
}