让用户配置插件的行为而无需制作自己的GUI的一种简单方法。用户可以更改您公开的任何设置,甚至可以更改键盘快捷键。
可以通过按HOTKEY(默认情况下F1)在游戏中访问配置管理器。悬停在设置名称上以查看其描述(如果有)。
该插件有两个版本,用于Bepinex 5(版本5.4.20或较新,仅Mono)和Bepinex 6(每晚构建664或较新,仅IL2CPP)。
注意:.xml文件在发行zip中包含在插件中时插件开发人员很有用。用户可以忽略它。
Arial.ttf
字体(UNITY UI默认字体在某些游戏中可能有所不同)。当使用错误配置的葡萄酒在Linux上运行游戏时,这可能会发生。UnityEngine.IMGUIModule.dll
的游戏中起作用(对某些游戏的支持可以与恢复缺失成员的Patcher一起添加,例如)。 ConfigurationManager将自动显示插件Config
中的所有设置。 ConfigurationManager将使用所有元数据(例如描述,值范围)向用户显示设置。
在大多数情况下,您不必参考configurationManager.dll或对您的设置进行任何特别的事情。只需确保添加尽可能多的元数据(即使所有用户直接使用配置文件也可以帮助所有用户)。始终添加描述性部分和关键名称,描述以及可接受的价值列表或范围(无论适用)。
创建设置时指定AcceptableValueRange
。如果范围为0f -1f或0-100,则将滑块显示为%(可以在下面覆盖)。
CaptureWidth = Config . Bind ( " Section " , " Key " , 1 , new ConfigDescription ( " Description " , new AcceptableValueRange < int > ( 0 , 100 ) ) ) ;
在创建设置时指定AcceptableValueList
。如果您使用枚举,则不需要指定可接受的valuelist,将显示所有枚举值。如果要隐藏一些值,则必须使用该属性。
注意:您可以将System.ComponentModel.DescriptionAttribute
添加到枚举的项目中,以覆盖其显示的名称。例如:
public enum MyEnum
{
// Entry1 will be shown in the combo box as Entry1
Entry1 ,
[ Description ( " Entry2 will be shown in the combo box as this string " ) ]
Entry2
}
添加类型的键盘ShortCut的设置。使用此设置的值检查更新方法内部的输入(推荐使用ISDOWN)。
键盘ShortCut类支持修饰符键 - 移位,控制和ALT。它们是正确处理的,可以防止常见问题,例如K+Shift+控制触发K+Shift,如果不应该触发K+Shift。
private ConfigEntry < KeyboardShortcut > ShowCounter { get ; set ; }
public Constructor ( )
{
ShowCounter = Config . Bind ( " Hotkeys " , " Show FPS counter " , new KeyboardShortcut ( KeyCode . U , KeyCode . LeftShift ) ) ;
}
private void Update ( )
{
if ( ShowCounter . Value . IsDown ( ) )
{
// Handle the key press
}
}
您可以通过将特殊类的实例作为设置标签来更改配置管理器窗口内显示的设置。特殊的类代码可以在此处下载。只需下载.cs文件并将其拖入您的项目。
以下是重新设置顺序的示例,并将其中一个设置标记为高级:
// Override IsAdvanced and Order
Config . Bind ( " X " , " 1 " , 1 , new ConfigDescription ( " " , null , new ConfigurationManagerAttributes { IsAdvanced = true , Order = 3 } ) ) ;
// Override only Order, IsAdvanced stays as the default value assigned by 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内部执行,使用Guilayout绘制您的设置,如下示例所示。
要将自定义设置抽屉用于单个设置,请在属性类中使用CustomDrawer
字段。有关属性类的更多信息,请参见上文。
void Start ( )
{
// Add the drawer as a tag to this setting.
Config . Bind ( " Section " , " Key " , " Some value "
new ConfigDescription ( " Desc " , null , new ConfigurationManagerAttributes { CustomDrawer = MyDrawer } ) ;
}
static void MyDrawer ( BepInEx . Configuration . ConfigEntryBase entry )
{
// Make sure to use GUILayout.ExpandWidth(true) to use all available space
GUILayout . Label ( entry . BoxedValue , GUILayout . ExpandWidth ( true ) ) ;
}
您可以为设置类型的所有设置指定抽屉。使用ConfigurationManager.RegisterCustomSettingDrawer(Type, Action<SettingEntryBase>)
来执行此操作。
警告:这需要您在项目中引用configurationManager.dll,并且不建议您使用所有用户都安装它。通常最好使用上述方法将自定义抽屉分别添加到每个设置中。
void Start ( )
{
ConfigurationManager . RegisterCustomSettingDrawer ( typeof ( MyType ) , CustomDrawer ) ;
}
static void CustomDrawer ( SettingEntryBase entry )
{
GUILayout . Label ( ( MyType ) entry . Get ( ) , GUILayout . ExpandWidth ( true ) ) ;
}