using System.IO; using System.Text; using Sirenix.OdinInspector; using Sirenix.OdinInspector.Editor; using UnityEditor; using UnityEngine; namespace ZEditor { public class GenAssetConstEditor : OdinEditorWindow { [MenuItem("Tool/自动生成资源常量代码")] static void Open() { GetWindow().Show(); } public string csName = "AssetConst"; [FolderPath] public string folderPath = "Assets/Scripts/Const"; [FolderPath] public string resPath = "Assets/Res"; [Sirenix.OdinInspector.FilePath] public string template = "Assets/Res/AssetsConstTemplate.txt"; [Button] public void Gen() { string path = $"{this.folderPath}/{this.csName}.cs"; StringBuilder sb = new StringBuilder(); this.Bridging(ref sb, this.resPath); var readAllText = File.ReadAllText(this.template); var content = readAllText.Replace("#CONSTCONTENT#", sb.ToString()).Replace("\\", "/"); if (!File.Exists(path)) { File.Create(path).Dispose(); } File.WriteAllText(path, content); } void Bridging(ref StringBuilder sb, string path) { DirectoryInfo info = new DirectoryInfo(path); var fileInfos = info.GetFiles(); var directoryInfos = info.GetDirectories(); foreach (var fileInfo in fileInfos) { if (fileInfo.Name.Contains(".meta")) continue; string filePath = fileInfo.FullName.Substring(Application.dataPath.Length - 6); var name = filePath.Replace("\\", "_").Replace(".", "_"); sb.AppendLine($"public const string {name} = @\"{filePath}\";"); } foreach (var directoryInfo in directoryInfos) { this.Bridging(ref sb, directoryInfo.FullName); } } } }