Uma maneira fácil de deixar o usuário configurar como um plug -in se comporta sem a necessidade de criar sua própria GUI. O usuário pode alterar qualquer uma das configurações que você expõe, até os atalhos do teclado.
O gerenciador de configuração pode ser acessado no jogo pressionando a tecla de atalho (por padrão F1). Passe o mouse sobre os nomes de configuração para ver suas descrições, se houver.
Existem duas versões deste plugin, para Bepinex 5 (versão 5.4.20 ou somente mono mais recente) e Bepinex 6 (Nightly Build 664 ou apenas mais recente, apenas IL2CPP).
NOTA: O arquivo .xml inclui no zip de liberação é útil para desenvolvedores de plug -in ao referenciar o ConfigurationManager.dll no seu plug -in, ele fornecerá descrições para tipos e métodos ao seu IDE. Os usuários podem ignorá -lo.
Arial.ttf
estiver ausente no sistema (a fonte padrão da UI da UI, pode ser diferente em alguns jogos). Isso pode acontecer ao executar um jogo no Linux com vinho mal configurado.UnityEngine.IMGUIModule.dll
(suporte para alguns jogos pode ser adicionado a um patcher que restaura membros desaparecidos, exemplo). O ConfigurationManager exibirá automaticamente todas as configurações da Config
do seu plug -in. Todos os metadados (por exemplo, descrição, intervalo de valor) serão usados pelo ConfigurationManager para exibir as configurações para o usuário.
Na maioria dos casos, você não precisa fazer referência ao ConfigurationManager.dll ou fazer qualquer coisa especial com suas configurações. Basta adicionar o máximo possível de metadados (isso ajudará todos os usuários, mesmo que eles usem os arquivos de configuração diretamente). Sempre adicione seções descritivas e nomes de chave, descrições e listas de valores aceitáveis ou intervalos (sempre que aplicável).
Especifique AcceptableValueRange
ao criar sua configuração. Se o intervalo for 0f - 1f ou 0 - 100, o controle deslizante será mostrado como % (isso pode ser substituído abaixo).
CaptureWidth = Config . Bind ( " Section " , " Key " , 1 , new ConfigDescription ( " Description " , new AcceptableValueRange < int > ( 0 , 100 ) ) ) ;
Especifique AcceptableValueList
ao criar sua configuração. Se você usar uma enumeração que não precisa especificar aceitável valuelista, todos os valores da enumeração serão mostrados. Se você deseja ocultar alguns valores, precisará usar o atributo.
NOTA: Você pode adicionar System.ComponentModel.DescriptionAttribute
aos itens do seu enum para substituir os nomes exibidos. Por exemplo:
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
}
Adicione uma configuração do tipo keyboardshortcut. Use o valor dessa configuração para verificar as entradas (recomendo usar o ISDOWN) dentro do seu método de atualização.
A classe KeyboardShortCut suporta teclas de modificador - Shift, Control e Alt. Eles são manuseados adequadamente, impedindo problemas comuns, como K+Shift+Control, acionando o K+Shift quando não deve ter.
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
}
}
Você pode alterar a forma como uma configuração é mostrada dentro da janela Gerenciador de configuração, passando uma instância de uma classe especial como uma tag da configuração. O código de classe especial pode ser baixado aqui. Basta baixar o arquivo .cs e arrastá -lo para o seu projeto.
Aqui está um exemplo de ordem primordial de configurações e marcar uma das configurações como avançado:
// 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 } ) ) ;
Se você estiver usando um tipo de configuração que não seja suportado pelo ConfigurationManager, poderá adicionar uma ação da gaveta. A ação será executada dentro do Ongui, use Guilayout para desenhar sua configuração, como mostrado no exemplo abaixo.
Para usar uma gaveta de definição personalizada para uma configuração individual, use o campo CustomDrawer
na classe Atributo. Veja acima para obter mais informações sobre a classe de atributo.
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 ) ) ;
}
Você pode especificar uma gaveta para todas as configurações de um tipo de configuração. Faça isso usando ConfigurationManager.RegisterCustomSettingDrawer(Type, Action<SettingEntryBase>)
.
Aviso: isso exige que você faça referência ao ConfigurationManager.dll em seu projeto e não é recomendado, a menos que você tenha certeza de que todos os usuários o terão instalado. Geralmente, é melhor usar o método acima para adicionar a gaveta personalizada a cada configuração individualmente.
void Start ( )
{
ConfigurationManager . RegisterCustomSettingDrawer ( typeof ( MyType ) , CustomDrawer ) ;
}
static void CustomDrawer ( SettingEntryBase entry )
{
GUILayout . Label ( ( MyType ) entry . Get ( ) , GUILayout . ExpandWidth ( true ) ) ;
}