Un moyen facile de permettre à l'utilisateur de configurer comment un plugin se comporte sans avoir besoin de créer votre propre interface graphique. L'utilisateur peut modifier l'un des paramètres que vous exposez, même les raccourcis clavier.
Le gestionnaire de configuration est accessible en jeu en appuyant sur la touche de la hottes lourde (par défaut F1). Survolent les noms des paramètres pour voir leurs descriptions, le cas échéant.
Il existe deux versions de ce plugin, pour Bepinex 5 (version 5.4.20 ou plus récent, mono uniquement) et Bepinex 6 (Nightly Build 664 ou plus récent, IL2CPP uniquement).
Remarque: Le fichier .xml inclut dans le zip de version est utile pour les développeurs de plugin lors de la référence à ConfigurationManager.dll dans votre plugin, il fournira des descriptions pour les types et méthodes à votre IDE. Les utilisateurs peuvent l'ignorer.
Arial.ttf
est probablement absente du système (police par défaut d'Unity UI peut être différente dans certains jeux). Cela peut se produire lors de l'exécution d'un jeu sur Linux avec du vin mal configuré.UnityEngine.IMGUIModule.dll
non dépassée (la prise en charge de certains des jeux peut être ajoutée avec un patcher qui restaure les membres manquants, exemple). ConfigurationManager affichera automatiquement tous les paramètres de Config
de votre plugin. Toutes les métadonnées (par exemple description, plage de valeur) seront utilisées par ConfigurationManager pour afficher les paramètres de l'utilisateur.
Dans la plupart des cas, vous n'avez pas à faire référence à ConfigurationManager.dll ou à faire quelque chose de spécial avec vos paramètres. Assurez-vous simplement d'ajouter autant de métadonnées que possible (cela aidera tous les utilisateurs, même s'ils utilisent directement les fichiers de configuration). Ajoutez toujours une section descriptive et des noms de clés, des descriptions et des listes de valeurs ou des gammes acceptables (partout applicables).
Spécifiez AcceptableValueRange
lors de la création de votre paramètre. Si la plage est de 0f - 1f ou 0 - 100, le curseur sera affiché en% (cela peut être remplacé ci-dessous).
CaptureWidth = Config . Bind ( " Section " , " Key " , 1 , new ConfigDescription ( " Description " , new AcceptableValueRange < int > ( 0 , 100 ) ) ) ;
Spécifiez AcceptableValueList
lors de la création de votre paramètre. Si vous utilisez une énumération, vous n'avez pas besoin de spécifier l'acceptable VALUELIST, toutes les valeurs d'énumération seront affichées. Si vous souhaitez masquer certaines valeurs, vous devrez utiliser l'attribut.
Remarque: Vous pouvez ajouter System.ComponentModel.DescriptionAttribute
aux éléments de votre énum pour remplacer leurs noms affichés. Par exemple:
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
}
Ajoutez un paramètre de type KeyboardShortcut. Utilisez la valeur de ce paramètre pour vérifier les entrées (recommandez l'utilisation de la fossé) à l'intérieur de votre méthode de mise à jour.
La classe KeyboardShortcut prend en charge les touches de modificateur - Shift, Control et Alt. Ils sont correctement manipulés, empêchant des problèmes courants comme K + Shift + Control déclenchant K + Shift alors qu'il n'aurait pas dû avoir.
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
}
}
Vous pouvez modifier la façon dont un paramètre est affiché à l'intérieur de la fenêtre Configuration Manager en passant une instance d'une classe spéciale en tant que balise du paramètre. Le code de classe spéciale peut être téléchargé ici. Téléchargez simplement le fichier .cs et faites-le glisser dans votre projet.
Voici un exemple d'ordre de paramètres primordial et de marquer l'un des paramètres comme avancé:
// 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 } ) ) ;
Si vous utilisez un type de paramètre qui n'est pas pris en charge par ConfigurationManager, vous pouvez ajouter une action de tiroir pour elle. L'action sera exécutée à l'intérieur d'ONGUI, utilisez Guilayout pour dessiner votre paramètre comme indiqué dans l'exemple ci-dessous.
Pour utiliser un tiroir de configuration personnalisé pour un paramètre individuel, utilisez le champ CustomDrawer
dans la classe d'attribut. Voir ci-dessus pour plus d'informations sur la classe d'attribut.
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 ) ) ;
}
Vous pouvez spécifier un tiroir pour tous les paramètres d'un type de paramètre. Faites cela en utilisant ConfigurationManager.RegisterCustomSettingDrawer(Type, Action<SettingEntryBase>)
.
AVERTISSEMENT: Cela vous oblige à faire référence à ConfigurationManager.dll dans votre projet et n'est recommandé que si vous êtes sûr que tous les utilisateurs l'ont installé. Il est généralement préférable d'utiliser la méthode ci-dessus pour ajouter le tiroir personnalisé à chaque paramètre individuellement à la place.
void Start ( )
{
ConfigurationManager . RegisterCustomSettingDrawer ( typeof ( MyType ) , CustomDrawer ) ;
}
static void CustomDrawer ( SettingEntryBase entry )
{
GUILayout . Label ( ( MyType ) entry . Get ( ) , GUILayout . ExpandWidth ( true ) ) ;
}