Простой способ позволить пользователю настроить, как ведет себя плагин без необходимости сделать свой собственный графический интерфейс. Пользователь может изменить любую из настроек, которые вы обнажаете, даже сочетания клавиш.
Доступ к диспетчере конфигурации можно получить в игре, нажав Hotkey (по умолчанию F1). Наведите на настройки имена, чтобы увидеть их описания, если таковые имеются.
Существует две версии этого плагина, для Bepinex 5 (версия 5.4.20 или более новее, только моно) и Bepinex 6 (Nightly Build 664 или более новая, только IL2CPP).
ПРИМЕЧАНИЕ. Файл .xml включает в Zip Release zip полезен для разработчиков плагинов при ссылке на configurationalmanager.dll в вашем плагине, он предоставит описания для типов и методов для вашего IDE. Пользователи могут игнорировать это.
Arial.ttf
отсутствует в системе (шрифт Unity UI по умолчанию, может отличаться в некоторых играх). Это может произойти при запуске игры на Linux с неправильным вином.UnityEngine.IMGUIModule.dll
. 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, все значения Enum будут показаны. Если вы хотите скрыть некоторые значения, вам придется использовать атрибут.
ПРИМЕЧАНИЕ. Вы можете добавить 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
}
Добавьте настройку типа KeyboardShortcut. Используйте значение этого настройки, чтобы проверить для входов (рекомендовать использование ISdown) внутри вашего метода обновления.
Класс KeyboardShortcut поддерживает клавиши модификатора - Shift, Control и Alt. Они правильно обрабатывают, предотвращая общие проблемы, такие как K+Shift+Control, запускающий 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>)
.
ПРЕДУПРЕЖДЕНИЕ: Это требует, чтобы вы ссылались на Configuration Manager.dll в вашем проекте и не рекомендуется, если вы не уверены, что все пользователи будут установлены. Обычно лучше использовать приведенный выше метод, чтобы добавить пользовательский ящик к каждой настройке индивидуально.
void Start ( )
{
ConfigurationManager . RegisterCustomSettingDrawer ( typeof ( MyType ) , CustomDrawer ) ;
}
static void CustomDrawer ( SettingEntryBase entry )
{
GUILayout . Label ( ( MyType ) entry . Get ( ) , GUILayout . ExpandWidth ( true ) ) ;
}