Partilhar via


Configurações do Gerenciador e de contexto das Ferramentas de Bloqueio Mundial

O Contexto das Ferramentas de Bloqueio Mundial permite a personalização paramétrica do Gerenciador de Ferramentas de Bloqueio Mundial no Inspetor Unity.

Embora o componente WorldLockingContext apresente uma interface do usuário para o WorldLockingManager, é importante entender que eles não são a mesma coisa e, em algumas situações, pode ser importante entender seu relacionamento.

O gerente é um singleton

O WorldLockingManager é um singleton criado sob demanda e que persiste durante a vida útil do aplicativo. Se nenhuma chamada for feita para o WorldLockingManager, ele nunca será instanciado. Uma vez instanciado, ele permanecerá ativo até que o aplicativo seja encerrado. Nunca é destruído e re-instanciado.

O WorldLockingManager não é um objeto Unity, é uma classe C# genérica. Sua atualização é conduzida por um componente proxy Unity, uma instância da classe privada WorldLockingManager.UpdateProxy. De outra forma, é independente dos ciclos de criação/atualização/destruição de Unity.

O Contexto é um componente Unity

O WorldLockingContext é um componente Unity que é adicionado a um objeto na cena da maneira usual. Seus campos aparecem no Unity Inspetor como qualquer outro componente Unity regular.

Embora não seja um erro ter vários WorldLockingContexts ativos em uma única cena, provavelmente não é desejado, pois o comportamento seria indefinido, dependendo da ordem desconhecida das cargas de objetos.

As configurações em um contexto são aplicadas quando o WorldLockingContext é carregado. Especificamente, o contexto envia suas configurações para o World Locking Tools Manager em sua chamada OnEnable e sempre que sua cena se torna a cena ativa. Este último é aplicado como parte do retorno de chamada Unity.SceneManager.activeSceneChanged, se e somente se a nova cena ativa for a cena à qual o contexto pertence.

Todas as configurações podem ser aplicadas a partir do script

A qualquer momento no tempo de execução, o aplicativo pode aplicar configurações personalizadas ao WorldLockingManager via script. Se for necessária qualquer demolição e reconstrução de recursos para efetuar uma alteração nas configurações, essa reconstrução ocorrerá imediatamente após a alteração das configurações.

Embora existam alguns membros de conveniência para obter valores de propriedade individuais do WorldLockingManager, por exemplo , AutoSave, a definição de parâmetros sempre acontece de forma agregada. Por exemplo, o código para alternar os recursos AutoMerge e AutoRefreeze pode ter esta aparência:

/// Get a copy of the current settings
var settings = WorldLockingManager.GetInstance().Settings;
/// Modify the copy
settings.AutoMerge = !settings.AutoMerge;
settings.AutoRefreeze = !settings.AutoRefreeze;
/// Update the current settings to the values in the copy.
WorldLockingManager.GetInstance().Settings = settings;

Da mesma forma para as configurações de diagnóstico.

Observe que alterar várias configurações ao mesmo tempo dessa maneira só incorre no custo de uma única reconstrução (se alguma for necessária).

Precedência das configurações

As regras para as configurações atualmente aplicadas ao WorldLockingManager são muito simples:

  1. Se nenhuma cena contendo um contexto tiver sido carregada e nenhuma configuração tiver sido definida explicitamente a partir do script, o WorldLockingManager terá configurações padrão.

  2. Uma configuração manterá seu valor até que seja substituída por um carregamento WorldLockingContext com uma cena ou uma alteração explícita invocada do aplicativo no script.

Deve-se ter cuidado ao misturar configurações do World Locking Tools Manager de contextos e configurações de scripts. Como o contexto sempre aplica suas configurações durante o carregamento, um script aplicando manualmente a configuração durante o carregamento, particularmente a partir de seu retorno de chamada OnAble, provavelmente encontrará condições de corrida e comportamento indeterminado.

Configurações disponíveis

As configurações disponíveis para controlar o comportamento das Ferramentas de Bloqueio Mundial são divididas em grupos da seguinte maneira.

Uma configuração básica de contexto de bloqueio mundial

Configurações de automação

As configurações de automação controlam o comportamento de tempo de execução do World Locking Tools Manager. Os campos disponíveis para modificação e suas implicações são documentados dentro da classe ManagerSettings . Eles são focados em habilitar ou desabilitar ações periódicas automatizadas por parte do gestor. Qualquer ação automatizada desativada pode ser executada manualmente.

A seção de automação do contexto

Configurações de vinculação

As configurações de vinculação são usadas para definir explicitamente a cena GameObjects cujas transformações serão usadas para aplicar as correções das Ferramentas de Bloqueio Mundial.

A secção de ligação do contexto

O campo "Usar existente" permite que os objetos vinculados sejam definidos uma vez na cena com o equipamento da câmera (com "Usar existente" falso), e não substituídos pelo carregamento de cenas de conteúdo subsequentes (com "Usar existente" verdadeiro).

Por outro lado, definir "Usar existente" como falso permite que várias cenas, cada uma com um equipamento de câmera diferente, se liguem aos lugares apropriados na hierarquia da câmera.

Ao criar e gerenciar a hierarquia da câmera a partir do script, o campo "Usar existente" deve ser definido como true em todos os contextos e as ligações atualizadas explicitamente a partir dos scripts de gerenciamento da câmera.

Quando as transformações necessárias não são fornecidas, deixadas nulas ou todos os contextos têm "Use Existing", então o sistema emite um aviso e tenta inferir boas escolhas. É recomendado, mas não obrigatório, definir explicitamente as transformações apropriadas, em vez de adivinhar o sistema.

Há duas opções adicionais aqui que controlam como a correção de transformação da câmera será aplicada.

A primeira caixa de seleção, para "Aplicar ajuste", o padrão é ativado. Isso diz ao sistema para aplicar a correção da câmera computada cada quadro para o "Quadro de ajuste". GameObject Desativar isso é um recurso muito avançado, e só deve ser tentado depois que todos os outros problemas forem resolvidos e uma compreensão profunda das Ferramentas de Bloqueio Mundial tiver sido alcançada. Em suma, ele diz ao sistema que a correção da câmera não deve ser aplicada à câmera, mas será aplicada por outros meios. Normalmente, isso é através de um AlignSubtree componente, mas não precisa ser.

A segunda caixa de seleção, para "No Pitch And Roll", diz ao sistema para zerar qualquer pitch and roll computado na transformação de Playspace para Locked Space. (Veja esta discussão sobre espaços de coordenadas WLT). Isso não tem efeito sobre a rotação aplicada pelo SpacePin sistema, mas afeta apenas a transformação de correção da câmera de bloqueio mundial calculada pelo Frozen World Engine.

Configurações de gerenciamento de âncora

O Gerenciamento de Âncora define toda a seleção explícita do sistema de rastreamento de âncora. Atualmente, essa seleção é feita apenas na inicialização e, uma vez selecionada, não pode ser alterada.

Outras configurações aqui permitem o controle sobre a densidade do gráfico de ancoragem interno subjacente. Estes podem ser alterados a qualquer momento, embora o seu efeito possa demorar algum tempo a propagar-se através do gráfico interno.

Ao cobrir áreas muito grandes, pode-se querer diminuir a densidade do gráfico de ancoragem interno para sacrificar a precisão para o desempenho. Aumentar o MinNewAnchorDistance faz exatamente isso. Ao aumentar a distância mínima necessária antes de adicionar uma nova âncora interna, o espaçamento entre as âncoras aumenta e, assim, a densidade das âncoras diminui.

Deve-se notar que, para passar no teste de criação de borda, o MaxAnchorEdgeLength deve ser maior do que o MinNewAnchorDistance. Na prática, um MaxAnchorEdgeLength 10-20% maior do que o MinNewAnchorDistance funciona bem.

O parâmetro MaxLocalAnchors, em vez de modificar a densidade, limita diretamente o número de âncoras internas. Atualmente, quando a contagem de âncoras está acima do limite, as âncoras mais distantes da câmera são recicladas para reduzir o número. No entanto, outros algoritmos são interessantes e estão a ser investigados, pelo que uma aplicação não deve depender desta implementação em particular.

A seção de gerenciamento de âncora do contexto

Mais detalhes estão documentados na estrutura AnchorSettings .

Definições de diagnósticos

As configurações de Diagnóstico controlam a coleta de diagnósticos para análise de comportamento e depuração. Eles normalmente devem ser deixados com "Usar padrões" definido, o que, entre outras coisas, desativa a coleta de diagnósticos. A coleta de diagnósticos é um ótimo arrasto de desempenho, portanto, deve ser evitado, a menos que necessário.

A seção de diagnóstico do contexto

Durante o desenvolvimento, quando um comportamento inesperado e indesejável está sendo visto, os dados de diagnóstico coletados desativando Usar Padrões e habilitando DiagnosticsSettings.Enabled permitirão a coleta de dados que podem ser fundamentais para entender e corrigir esse comportamento.

Os campos disponíveis para modificação são descritos na classe DiagnosticsSettings .

Configurações padrão

As configurações do gerenciador e do diagnóstico contêm uma caixa de seleção "Usar padrões" nas configurações. A propriedade "Usar padrões" também está disponível no script.

Quando a propriedade "Usar padrões" é true, as configurações padrão atuais são usadas. Se os valores padrão de uma propriedade forem alterados em uma nova versão, a propriedade "Usar padrões" instruirá o sistema a usar o novo valor da propriedade.

Definir a propriedade "Usar padrões" como true a qualquer momento redefinirá todos os valores para seus valores padrão atuais . Para bloquear os valores em um instantâneo dos valores padrão em um determinado momento, habilite a propriedade "Usar padrões" para redefinir todos os campos para os padrões atuais e, em seguida, desdefina a caixa de seleção para impedir que eles sejam alterados com uma atualização.

Sugere-se deixar o "Usar padrões" definido como true, exceto durante o desenvolvimento para experimentação e depuração.

Consulte também