Eine einfache Möglichkeit, den Benutzer zu konfigurieren, wie sich ein Plugin verhält, ohne dass Sie Ihre eigene GUI erstellen müssen. Der Benutzer kann alle Einstellungen ändern, die Sie aussetzen, sogar Tastaturverknüpfungen.
Der Konfigurationsmanager kann im Spiel durch Drücken des Hotkey (standardmäßig F1) zugegriffen werden. Bewegen Sie die Namensnamen, um ihre Beschreibungen zu sehen, falls vorhanden.
Es gibt zwei Versionen dieses Plugins, für BEPINEX 5 (Version 5.4.20 oder neuer, nur Mono) und Bepinex 6 (nächtliche Build 664 oder neuer, nur IL2CPP).
HINWEIS: Die .xml -Datei in der Release -ZIP ist für Plugin -Entwickler nützlich, wenn ConfigurationManager.dll in Ihrem Plugin referenzieren. Sie enthält Beschreibungen für Typen und Methoden für Ihre IDE. Benutzer können es ignorieren.
Arial.ttf
-Schrift im System (Unity UI Standard -Schriftart kann in einigen Spielen unterschiedlich sein). Dies kann passieren, wenn Sie ein Spiel unter Linux mit falsch konfiguriertem Wein durchführen.UnityEngine.IMGUIModule.dll
entlarvt haben (Unterstützung für einige der Spiele kann mit einem Patcher hinzugefügt werden, der fehlende Mitglieder wiederherstellt, Beispiel). ConfigurationManager zeigt automatisch alle Einstellungen von Config
Ihres Plugins an. Alle Metadaten (z. B. Beschreibung, Wertebereich) werden von ConfigurationManager verwendet, um die Einstellungen dem Benutzer anzuzeigen.
In den meisten Fällen müssen Sie keine KonfigurationManager.DLL verweisen oder etwas Besonderes mit Ihren Einstellungen machen. Stellen Sie einfach sicher, dass Sie so viel Metadaten wie möglich hinzufügen (dies hilft allen Benutzern, auch wenn sie die Konfigurationsdateien direkt verwenden). Fügen Sie immer deskriptiven Abschnitts und Schlüsselnamen, Beschreibungen und akzeptablen Wertlisten oder -sträger hinzu (wo immer zutreffend).
Geben Sie beim Erstellen Ihrer Einstellung AcceptableValueRange
an. Wenn der Bereich 0F - 1F oder 0 - 100 beträgt, wird der Schieberegler als % angezeigt (dies kann unten überschrieben werden).
CaptureWidth = Config . Bind ( " Section " , " Key " , 1 , new ConfigDescription ( " Description " , new AcceptableValueRange < int > ( 0 , 100 ) ) ) ;
Geben Sie beim Erstellen Ihrer Einstellung AcceptableValueList
an. Wenn Sie eine Aufzählung verwenden, müssen Sie nicht den AkzeptableValuelist angeben, alle Enum -Werte werden angezeigt. Wenn Sie einige Werte ausblenden möchten, müssen Sie das Attribut verwenden.
Hinweis: Sie können System.ComponentModel.DescriptionAttribute
zu den Elementen Ihres Enum hinzufügen, um ihre angezeigten Namen zu überschreiben. Zum Beispiel:
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
}
Fügen Sie eine Einstellung von Typ KeyboardshortCut hinzu. Verwenden Sie den Wert dieser Einstellung, um die Eingänge (Empfehlung von ISDOWN) innerhalb Ihrer Aktualisierungsmethode zu überprüfen.
Die KeyboardshortCut -Klasse unterstützt Modifikator -Tasten - Verschiebung, Steuerung und Alt. Sie werden ordnungsgemäß behandelt und verhindern häufige Probleme wie K+Shift+Control -Auslöser K+Verschiebung, wenn sie nicht haben sollte.
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
}
}
Sie können ändern, wie eine Einstellung im Fenster Konfigurationsmanager angezeigt wird, indem Sie eine Instanz einer speziellen Klasse als Tag der Einstellung übergeben. Der spezielle Klassencode kann hier heruntergeladen werden. Laden Sie einfach die .cs -Datei herunter und ziehen Sie sie in Ihr Projekt.
Hier ist ein Beispiel für eine übergeordnete Reihenfolge der Einstellungen und die Markierung einer der Einstellungen als fortgeschritten:
// 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 } ) ) ;
Wenn Sie einen Einstellentyp verwenden, der von ConfigurationManager nicht unterstützt wird, können Sie eine Schubladenaktion dafür hinzufügen. Die Aktion wird in Ongui ausgeführt. Verwenden Sie Guilayout, um Ihre Einstellung wie im folgenden Beispiel gezeigt zu zeichnen.
Verwenden Sie das Feld CustomDrawer
in der Attributklasse, um eine benutzerdefinierte festgelegte Schublade für eine individuelle Einstellung zu verwenden. Weitere Informationen zur Attributklasse finden Sie oben.
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 ) ) ;
}
Sie können eine Schublade für alle Einstellungen eines Einstellungsarts angeben. Tun Sie dies unter Verwendung von ConfigurationManager.RegisterCustomSettingDrawer(Type, Action<SettingEntryBase>)
.
WARNUNG: Dies erfordert, dass Sie ConfigurationManager.dll in Ihrem Projekt verweisen und nicht empfohlen werden, es sei denn, Sie sind sicher, dass alle Benutzer es installiert haben. Normalerweise ist es besser, die oben genannte Methode zu verwenden, um die benutzerdefinierte Schublade zu jeder Einstellung einzeln hinzuzufügen.
void Start ( )
{
ConfigurationManager . RegisterCustomSettingDrawer ( typeof ( MyType ) , CustomDrawer ) ;
}
static void CustomDrawer ( SettingEntryBase entry )
{
GUILayout . Label ( ( MyType ) entry . Get ( ) , GUILayout . ExpandWidth ( true ) ) ;
}