项目设置(配置式分组)
给字段或无参 void 方法加一行 [HYCSettingsGroup("分组/子分组")],它就出现在 HYC Framework/Settings/Project Settings 窗口里。窗口里没有写死任何分组清单——加 / 删 / 改分组只改那一行的特性字符串。
命名空间 HYC.Framework.Editor(Editor 程序集内,运行时不存在)。适用 v3.0.0+(Unity 2022.3)。
用法
using HYC.Framework.Editor;
namespace MyGame.Editor
{
internal static class MyGameSettings
{
// 顶层分组 General,标签自动出 "Verbose editor logs"
[HYCSettingsGroup("My Game", Label = "Verbose editor logs")]
internal static bool Verbose = true;
[HYCSettingsGroup("My Game", Label = "Max entity hint", Order = 10)]
internal static int MaxEntityHint = 2000;
[HYCSettingsGroup("My Game", Label = "Remote host")]
internal static string RemoteHost = "127.0.0.1";
// 自定义枚举字段 → 自动出 EnumPopup
[HYCSettingsGroup("My Game", Label = "Default channel")]
internal static GameChannel DefaultChannel = GameChannel.Sfx;
internal enum GameChannel { Sfx, Music, Voice }
}
}
方法也可以(无参 void),用来放按钮和自定义控件:
[HYCSettingsGroup("My Game/Tools")]
internal static void DrawTools()
{
if (GUILayout.Button("Rebuild All Configs"))
MyGameConfigTools.RebuildAll();
EditorGUILayout.HelpBox("会在 Console 输出逐表耗时。", MessageType.Info);
}
核心类
| 类 | 职责 |
|---|---|
HYCSettingsGroupAttribute | 声明「这个成员属于哪个分组」。AttributeTargets.Method | Field,不可重复标注 |
HYCSettingsRegistry | 反射扫描 → 分组树;字段自动绘制与持久化 |
HYCSettings | 设置资产本体(SO):具名字段 + 键值条目表,所有写操作立即落盘 |
HYCEditorSettingsWindow | Unity Preferences 式两栏窗口;RegisterHost(this) 登记自身,故窗口内的私有成员也生效 |
菜单:HYC Framework/Settings/Project Settings(pri 200)。
坑
- 加了特性,左栏不出现——原因:① 所在程序集没有引用
HYC.Framework.Editor(注册表只扫引用了它的程序集);② 是实例成员但宿主没RegisterHost;③ 结果已缓存,改完触发一次域重载或调HYCSettingsRegistry.Rebuild()。 - 方法被忽略并告警——签名必须是无参
void;泛型方法同样不支持。 - 字段出黄色提示框——类型不在
bool/int/float/string/enum之内。要复杂控件 → 改用方法自己画。 - 升级后旧设置值被冲掉——未显式
Key时键由「类型全名 + 字段名」生成,改名即换键。稳定后显式指定Key。 - 分组名里的斜杠被切成两层——路径里的半角
/是分隔符。名字本身要带斜杠请用全角/。 - 设置值统一存
Assets/HYC/HYCSettings.asset,不再是本机 EditorPrefs。