BepInEx配置管理器

创作者: toebeann
已更新:2023-01-29 07:21:08
37KB

前置 MOD

使用 BepInEx配置管理器 时将自动安装

关于此 MOD

BepInEx 5的插件/模块配置管理器,已针对Subnautica和Subnautica:Below Zero进行了调整。一种简单的方法,让用户配置插件的行为方式,而无需制作自己的GUI。用户可以更改任何设置
BepInEx 5 的插件/模块配置管理器,已针对 Subnautica 和 Subnautica: Below Zero 进行了调整

这是一种让用户轻松配置插件行为的方式,无需您自行创建 GUI。用户可以更改您公开的任何设置,甚至是键盘快捷键。

游戏中按下快捷键(默认为 F5)即可访问配置管理器。将鼠标悬停在设置名称上即可查看其描述(如有)。



如何使用


注意:.xml 文件对插件开发者很有用。在插件中引用 ConfigurationManager .dll 时,它会向 IDE 提供类型和方法的描述。用户可以忽略它。



本指南的其余部分适用于插件开发者。用户只需按照上述说明进行安装即可。


如何使我的 mod 兼容?

ConfigurationManager 将自动显示插件的所有设置配置. 所有元数据(例如描述、值范围)将被 ConfigurationManager 使用来向用户显示设置。

大多数情况下,您无需引用 ConfigurationManager.dll 或对您的设置进行任何特殊处理。只需确保添加尽可能多的元数据(这样做将对所有用户都有帮助,即使他们直接使用配置文件)。始终添加描述性部分和键名称、说明以及可接受的值列表或范围(在适用的情况下)。



如何将我的设置变成滑块?

指定可接受值范围创建设置时。如果范围是 0f - 1f 或 0 - 100,滑块将显示为 %(这可以在下方覆盖)。

CaptureWidth = Config.Bind("部分", "键", 1, new ConfigDescription("描述", new AcceptableValueRange(0,100));



如何将我的设置变成下拉列表?

指定可接受值列表创建设置时。如果使用枚举,则无需指定可接受值列表,所有枚举值都将显示出来。如果要隐藏某些值,则必须使用 属性。

注意:您可以添加System.ComponentModel.DescriptionAttribute添加到枚举项中,以覆盖其显示的名称。例如:


公共枚举 MyEnum
{
// Entry1 将在组合框中显示为 Entry1
条目1,
[Description("Entry2 将在组合框中显示为该字符串")]
条目2
}



如何允许用户更改我的键盘快捷键/如何轻松检查按键?

添加类型设置键盘快捷键。使用此设置的值来检查输入(建议使用已关闭)在你的更新方法。

这键盘快捷键该类支持修饰键 - Shift、Control 和 Alt。它们已得到妥善处理,从而避免了诸如 K+Shift+Control 触发 K+Shift 之类的常见问题。


私有配置条目显示计数器 { 获取; 设置; }

公共构造函数()
{
ShowCounter = Config.Bind("热键", "显示 FPS 计数器", new KeyboardShortcut(KeyCode.U, KeyCode.LeftShift));
}

私有无效更新()
{
如果(ShowCounter.Value.IsDown())
{
// 处理按键
}
}



覆盖默认配置管理器行为

您可以通过将特殊类的实例作为设置的标签传递来更改设置于配置管理器窗口内的显示方式。特殊类代码可以下载这里。只需下载.cs 文件并将其拖到您的项目中。

  • 您不必引用 ConfigurationManager .dll 即可使其工作。
  • 只要类的名称及其字段的声明保持不变,该类就会起作用。
  • 避免将类公开,以防止与其他插件冲突。如果您想在插件之间共享它,请为每个插件提供一个
    复制或将其移动到您的自定义命名空间。
  • 如果游戏中未安装 ConfigurationManager 插件,则此类将被安全忽略,并且您的插件将正常工作。

以下是覆盖设置顺序并将其中一个设置标记为高级的示例:


// 覆盖 IsAdvanced 和 Order
Config.Bind("X", "1", 1, new ConfigDescription("", null, new ConfigurationManagerAttributes { IsAdvanced = true, Order = 3 }));
// 仅覆盖 Order,IsAdvanced 保持为 ConfigManager 分配的默认值
Config.Bind("X", "2", 2, new ConfigDescription("", null, new ConfigurationManagerAttributes { Order = 1 }));
Config.Bind("X", "3", 3, new ConfigDescription("", null, new ConfigurationManagerAttributes { Order = 2 }));


如何为我的设置创建自定义编辑器?

如果您使用的设置类型不受 ConfigurationManager 的支持,您可以添加一个抽屉行动为了它。行动将在内部执行OnGUI, 使用GUI布局绘制您的设置,如下例所示。

要使用自定义设置抽屉进行个人设置,请使用自定义抽屉属性类中的字段。有关属性类的更多信息,请参阅上文。


无效开始()
{
// 将抽屉作为标签添加到此设置。
Config.Bind(“部分”, “键”, “某些值”
新的 ConfigDescription("Desc", null, 新的 ConfigurationManagerAttributes{ CustomDrawer = MyDrawer });
}

静态 void MyDrawer(BepInEx.Configuration.ConfigEntryBase 条目)
{
// 确保使用 GUILayout.ExpandWidth(true) 来利用所有可用空间
GUILayout.Label(entry.BoxedValue,GUILayout.ExpandWidth(true));
}



全局添加自定义编辑器

您可以为某个设置类型的所有设置指定一个抽屉。使用ConfigurationManager.RegisterCustomSettingDrawer(类型,操作).

警告:这需要您在项目中引用 ConfigurationManager .dll,除非您确定所有用户都已安装,否则不建议这样做。通常,最好使用上述方法将自定义抽屉分别添加到每个设置中。


无效开始()
{
配置管理器.注册自定义设置抽屉(typeof(MyType),自定义抽屉);
}

静态 void CustomDrawer(SettingEntryBase 条目)
{
GUILayout.Label((MyType)entry.Get(), GUILayout.ExpandWidth(true));
}

深海迷航 的热门 MOD

探索适用于 深海迷航 的最佳MOD,带来新功能、升级画面,以及令人兴奋的方式来改变您的游戏体验。

使用 Xmod 解锁 深海迷航 的全部潜力 — 今天就探索这些顶级 MOD!