using UnityEngine; using System.IO; using UnityEditor; using System.Collections.Generic; using System.Linq; /// /// 梳理Resources 和StreamingAssets中的资源文件 并生成资源路径文件 /// 通过AssetsManager获取资源路径 /// public class GenerateAssetsConfig :Editor { /// /// 生成配置文件:创建一个文件,文件中写内容, /// 遍历Resources资源文件夹得到路径 *.prefab >>IO /// [MenuItem("Tools/Generate Config File/Resources")] public static void GenerateResourcesMap() { string path = Path.Combine(Application.dataPath, "Resources").Replace(@"\", "/"); string[] resFiles = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).Where(p=>!p.EndsWith(".meta")).ToArray(); Dictionary resDic = new Dictionary(); for (int i = 0; i < resFiles.Length; i++) { //Hit_Ice_Chest=Skill/HitFx/Hit_Ice_Chest 值 键 string key = Path.GetFileNameWithoutExtension(resFiles[i]); string value = resFiles[i].Replace(@"\", "/").Replace(path + "/", ""); int index = value.LastIndexOf('.'); value = value.Remove(index); //Replace(".prefab", "");//掐头去尾 resFiles[i] = key + "=" + value; if (!resDic.ContainsKey(key))//记录字典便于查重 { resDic.Add(key, value); } else { Debug.LogError($"名称重复的资源{resDic[key]}={value}"); } } File.WriteAllLines(Path.Combine(path, "ResMap.txt"), resFiles); AssetDatabase.Refresh(); } /// /// 生成配置文件:创建一个文件,文件中写内容, /// 遍历StreamingAssets资源文件夹得到路径 排除.meta 和 .manifest /// [MenuItem("Tools/Generate Config File/StreamingAssets")] public static void GenerateSAMap() { string path = Path.Combine(Application.dataPath, "StreamingAssets").Replace(@"\", "/"); string[] resFiles = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).Where(p=>!p.EndsWith(".meta")&&!p.EndsWith(".manifest")).ToArray();//排除Unity自动创建的.meta 和 .manifest文件 Dictionary resDic = new Dictionary(); for (int i = 0; i < resFiles.Length; i++) { //Hit_Ice_Chest=Skill/HitFx/Hit_Ice_Chest 值 键 string key = Path.GetFileNameWithoutExtension(resFiles[i]); string value = resFiles[i].Replace(@"\", "/").Replace(path + "/", "");//掐头 resFiles[i] = key + "=" + value; if (!resDic.ContainsKey(key))//记录字典便于查重 { resDic.Add(key, value); } else { Debug.LogError($"名称重复的资源{resDic[key]}={value}"); } } File.WriteAllLines(Path.Combine(path, "SAMap.txt"), resFiles); AssetDatabase.Refresh(); } }