Una manera fácil de dejar que el usuario configure cómo se comporta un complemento sin la necesidad de hacer su propia GUI. El usuario puede cambiar cualquiera de las configuraciones que exponga, incluso los atajos de teclado.
Se puede acceder al Administrador de configuración en el juego presionando la tecla de acceso rápido (por defecto F1). Pase el cierre de los nombres de configuración para ver sus descripciones, si las hay.
Hay dos versiones de este complemento, para Bepinex 5 (versión 5.4.20 o más nuevo, mono solamente) y Bepinex 6 (construcción nocturna 664 o más nueva, solo IL2CPP).
Nota: El archivo .xml incluye en el zip de versión es útil para los desarrolladores de complementos al hacer referencia a ConfigurationManager.dll En su complemento, proporcionará descripciones para tipos y métodos a su IDE. Los usuarios pueden ignorarlo.
Arial.ttf
del sistema (Fuente predeterminado de UI UIS, puede ser diferente en algunos juegos). Esto puede suceder al ejecutar un juego en Linux con vino mal configurado.UnityEngine.IMGUIModule.dll
sin franqueza (el soporte para algunos de los juegos se puede agregar con un patcher que restaura los miembros faltantes, ejemplo). ConfigurationManager mostrará automáticamente todas las configuraciones de Config
de su complemento. ConfigurationManager utilizará todos los metadatos (por ejemplo, descripción, rango de valor) para mostrar la configuración del usuario.
En la mayoría de los casos, no tiene que hacer referencia a ConfigurationManager.dll o hacer algo especial con su configuración. Simplemente asegúrese de agregar la mayor cantidad de metadatos posible (hacerlo ayudará a todos los usuarios, incluso si usan los archivos de configuración directamente). Siempre agregue la sección descriptiva y los nombres de clave, descripciones y listas o rangos de valor aceptables (donde sea correspondiente).
Especifique AcceptableValueRange
al crear su configuración. Si el rango es 0f - 1f o 0 - 100, el control deslizante se mostrará como % (esto se puede anular a continuación).
CaptureWidth = Config . Bind ( " Section " , " Key " , 1 , new ConfigDescription ( " Description " , new AcceptableValueRange < int > ( 0 , 100 ) ) ) ;
Especifique AcceptableValueList
al crear su configuración. Si usa un enum que no necesita especificar aceptableValuelista, se mostrarán todos los valores de enum. Si desea ocultar algunos valores, deberá usar el atributo.
Nota: puede agregar System.ComponentModel.DescriptionAttribute
a los elementos de su enum para anular sus nombres mostrados. Por ejemplo:
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
}
Agregue una configuración de tipo de teclado. Use el valor de esta configuración para verificar las entradas (recomendar usar ISDOW) dentro de su método de actualización.
La clase KeyboardShortCut admite teclas del modificador: Shift, Control y Alt. Se manejan adecuadamente, evitando problemas comunes como K+Shift+Control que desencadena el cambio K+cuando no debería haberlo hecho.
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
}
}
Puede cambiar la forma en que se muestra una configuración dentro de la ventana del Administrador de configuración al pasar una instancia de una clase especial como una etiqueta de la configuración. El código de clase especial se puede descargar aquí. Simplemente descargue el archivo .cs y arrastrelo a su proyecto.
Aquí hay un ejemplo de orden primordial de la configuración y marcando una de las configuraciones como avanzada:
// 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 está utilizando un tipo de configuración que no es compatible con ConfigurationManager, puede agregar una acción de cajón para ello. La acción se ejecutará dentro de OnGui, use Guilayout para dibujar su configuración como se muestra en el ejemplo a continuación.
Para usar un cajón de configuración personalizado para una configuración individual, use el campo CustomDrawer
en la clase de atributos. Vea arriba para obtener más información sobre la clase de atributos.
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 ) ) ;
}
Puede especificar un cajón para todas las configuraciones de un tipo de configuración. Haga esto utilizando ConfigurationManager.RegisterCustomSettingDrawer(Type, Action<SettingEntryBase>)
.
ADVERTENCIA: Esto requiere que haga referencia a ConfigurationManager.dll en su proyecto y no se recomienda a menos que esté seguro de que todos los usuarios lo tendrán instalado. Por lo general, es mejor usar el método anterior para agregar el cajón personalizado a cada configuración individualmente.
void Start ( )
{
ConfigurationManager . RegisterCustomSettingDrawer ( typeof ( MyType ) , CustomDrawer ) ;
}
static void CustomDrawer ( SettingEntryBase entry )
{
GUILayout . Label ( ( MyType ) entry . Get ( ) , GUILayout . ExpandWidth ( true ) ) ;
}