最近工作中遇到需要封装一个音频管理系统,需要把所有音频资源写成一个枚举类型,但是总不能一个一个的复制粘贴吧....所以写了这样一个读取配置文件的脚步,大家共同学习.
把脚步放到Editor文件夹下 , 点击即可自动生成需要的文件名了;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
public class ReaderMusicName
{
[MenuItem("Shuai/一键生成音频配置文件")]
private static void GetMusicName()
{
// 配置你需要的遍历的文件夹
string outPath = Application.dataPath + "/" + "Bundle/game0021/Resources/Music";
DirectoryInfo directoryInfo = new DirectoryInfo(outPath);
DirectoryInfo[] musicDirectoyis = directoryInfo.GetDirectories();
foreach (var item in musicDirectoyis)
{
string str = outPath + "/" + item.Name;
DirectoryInfo dt = new DirectoryInfo(str);
if (dt==null)
{
Debug.Log("没有该子文件夹");
return;
}
else
{
Dictionary<string, string> fileDic = new Dictionary<string, string>();
int index = str.LastIndexOf('/');
string sceneName = str.Substring(index + 1);
OnMusicFileSystemInfo(dt, fileDic);OnWriteMusicFile(sceneName,fileDic);
}
}
AssetDatabase.Refresh();
Debug.Log("音频配置文件生成成功,牛逼!");
}
private static void OnMusicFileSystemInfo(FileSystemInfo fileSystem , Dictionary<string,string> fileDic)
{
if (!fileSystem.Exists)
{
Debug.Log("该文件不存在");
return;
}
DirectoryInfo directortIn = fileSystem as DirectoryInfo;
FileSystemInfo[] fileSystemInfos = directortIn.GetFileSystemInfos();
foreach (var item in fileSystemInfos)
{
FileInfo fileinfo = item as FileInfo;
if (fileinfo != null)
{
if (fileinfo.Extension != ".meta")
{
fileDic.Add(fileinfo.Name,directortIn.FullName);
}
}
else
{
OnMusicFileSystemInfo(item, fileDic);
}
}
}
private static void OnWriteMusicFile(string sceneName, Dictionary<string,string> fileDic)
{
string path = Application.dataPath + "/" + sceneName + ".txt";
using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
{
using (StreamWriter sw = new StreamWriter(fs))
{
// sw.WriteLine(fileDic.Count);
foreach (var item in fileDic)
{
sw.WriteLine(item.Key.Split('.')[0].ToString() + ",");
}
}
}
}
}
此时点击如图按钮
就会出现需要的文件名了