using System.IO;
using UnityEditor;
using UnityEngine;
public class AudioEditor
{
[MenuItem("Tools/GenAudioEnum", false, 2000)]
public static void GetAudioEnum()
{
string audioPath = Application.dataPath;
Debug.LogError(audioPath);
audioPath += "/Resources/Audio";//your path
if (Directory.Exists(audioPath))
{
DirectoryInfo direction = new DirectoryInfo(audioPath);
FileInfo[] files = direction.GetFiles("*", SearchOption.AllDirectories);
Debug.Log(files.Length);
string audioEnumFile = @"
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by Tools/GenAudioEnum.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace yourNameSpace
{
public enum AudioEnum
{
";
for (int i = 0; i < files.Length; i++)
{
if (files[i].Name.EndsWith(".meta"))
{
continue;
}
string extensionName = Path.GetExtension(files[i].Name);
extensionName = extensionName.ToLower();
if (extensionName == ".mp3" || extensionName == ".aiff" || extensionName == ".wav" || extensionName == ".ogg")
{
string path = files[i].DirectoryName.Substring(Application.dataPath.Length + 17);
string[] paths = path.Split('\\');
string temp = "";
for (int j = 0; j < paths.Length; j++)
{
temp += paths[j] + "_";
}
temp += Path.GetFileNameWithoutExtension(files[i].Name);
audioEnumFile += " " + temp + ",\n";
}
}
audioEnumFile += @"
}
}";
string filePath = Application.dataPath + "/Scripts/AudioEnum.cs";//your path
File.WriteAllText(filePath, audioEnumFile);
AssetDatabase.Refresh();
}
}
}
有一个注意点或者缺点,音效文件的命名不能带有下划线(你定义的分隔符)。
public class Client
{
private AudioClip LoadAudio(AudioEnum audioType)
{
string filePath = "Audio/" + audioType.ToString().Replace('_', '/');
return Resources.Load<AudioClip>(filePath);
}
}