using System; using System.Collections.Generic; using System.IO; using System.Linq; using UnityEditor; using UnityEngine; namespace Stary.Evo.Editor { /// /// 自定义EditorPrefs实现,数据存储在项目根目录的EditorPrefs.ini文件中 /// public static class CustomEditorPrefs { private const string FileName = "EditorPrefs.ini"; private static string FilePath => Path.Combine(Application.dataPath, "..", FileName); // 缓存的数据 private static Dictionary _dataCache; private static bool _isDataLoaded; /// /// 设置字符串值 /// /// 键 /// 值 public static void SetString(string key, string value) { LoadData(); _dataCache[key] = value; SaveData(); } /// /// 获取字符串值 /// /// 键 /// 默认值 /// public static string GetString(string key, string defaultValue = "") { LoadData(); return _dataCache.TryGetValue(key, out var value) ? (string)value : defaultValue; } /// /// 设置整数值 /// /// 键 /// 值 public static void SetInt(string key, int value) { LoadData(); _dataCache[key] = value; SaveData(); } /// /// 获取整数值 /// /// 键 /// 默认值 /// public static int GetInt(string key, int defaultValue = 0) { LoadData(); return _dataCache.TryGetValue(key, out var value) ? (int)value : defaultValue; } /// /// 设置浮点数值 /// /// 键 /// 值 public static void SetFloat(string key, float value) { LoadData(); _dataCache[key] = value; SaveData(); } /// /// 获取浮点数值 /// /// 键 /// 默认值 /// public static float GetFloat(string key, float defaultValue = 0.0f) { LoadData(); return _dataCache.TryGetValue(key, out var value) ? (float)value : defaultValue; } /// /// 设置布尔值 /// /// 键 /// 值 public static void SetBool(string key, bool value) { LoadData(); _dataCache[key] = value; SaveData(); } /// /// 获取布尔值 /// /// 键 /// 默认值 /// public static bool GetBool(string key, bool defaultValue = false) { LoadData(); return _dataCache.TryGetValue(key, out var value) ? (bool)value : defaultValue; } /// /// 检查是否存在指定的键 /// /// 键 /// 是否存在 public static bool HasKey(string key) { LoadData(); return _dataCache.ContainsKey(key); } /// /// 删除指定的键 /// /// 键 public static void DeleteKey(string key) { LoadData(); if (_dataCache.Remove(key)) { SaveData(); } } /// /// 清除所有数据 /// public static void DeleteAll() { _dataCache.Clear(); SaveData(); } /// /// 获取所有键 /// /// 键列表 public static string[] GetAllKeys() { LoadData(); return _dataCache.Keys.ToArray(); } /// /// 获取所有键值对 /// /// 键值对字典 public static Dictionary GetAll() { LoadData(); return new Dictionary(_dataCache); } /// /// 从文件加载数据 /// private static void LoadData() { if (_isDataLoaded && _dataCache != null) return; _dataCache = new Dictionary(); if (!File.Exists(FilePath)) { _isDataLoaded = true; return; } try { var lines = File.ReadAllLines(FilePath); foreach (var line in lines) { if (string.IsNullOrWhiteSpace(line) || line.StartsWith("#")) continue; var parts = line.Split(new[] { '=' }, 2); if (parts.Length != 2) continue; var key = parts[0].Trim(); var valueStr = parts[1].Trim(); // 尝试解析不同类型的值 if (bool.TryParse(valueStr, out var boolValue)) { _dataCache[key] = boolValue; } else if (int.TryParse(valueStr, out var intValue)) { _dataCache[key] = intValue; } else if (float.TryParse(valueStr, out var floatValue)) { _dataCache[key] = floatValue; } else { // 字符串类型 _dataCache[key] = valueStr; } } } catch (Exception e) { Debug.LogError($"加载CustomEditorPrefs数据失败: {e.Message}"); _dataCache = new Dictionary(); } _isDataLoaded = true; } /// /// 保存数据到文件 /// private static void SaveData() { if (_dataCache == null) return; try { var lines = new List { "# Custom Editor Prefs Data", $"# Last Modified: {DateTime.Now}", "" }; foreach (var kvp in _dataCache) { var valueStr = kvp.Value.ToString(); lines.Add($"{kvp.Key}={valueStr}"); } // 确保目录存在 var directory = Path.GetDirectoryName(FilePath); if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory)) { Directory.CreateDirectory(directory); } File.WriteAllLines(FilePath, lines); } catch (Exception e) { Debug.LogError($"保存CustomEditorPrefs数据失败: {e.Message}"); } } /// /// 手动刷新数据(重新从文件加载) /// public static void Refresh() { _isDataLoaded = false; LoadData(); } } }