◆ 持续开发中 · 当前为非稳定版本,如需抢先体验请通过 GitHub Issues 联系作者

项目设置(配置式分组)

给字段或无参 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):具名字段 + 键值条目表,所有写操作立即落盘
HYCEditorSettingsWindowUnity 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。