Sistemas de coordenadas espaciais persistentes
Em geral, os benefícios dos recursos de persistência das World Locking Tools são mais interessantes do que os detalhes de sua implementação.
Este artigo começará, portanto, com uma discussão sobre as experiências que a persistência do World Locking Tools permite. Depois disso, veremos como a persistência do Estado das Ferramentas de Bloqueio Mundial pode ser gerenciada. Em seguida, encerraremos com um breve esboço de quais dados são salvos e carregados.
Ferramentas de bloqueio mundial em todas as sessões
Conforme definido em outro lugar, o Estado Congelado é todos os dados necessários para retomar o atual espaço estável bloqueado pelo mundo.
A principal utilidade da persistência da World Locking Tools está em permitir que os benefícios do trabalho de uma sessão preliminar, digitalizando uma área e alinhando o espaço virtual ao mundo real, sejam usados em sessões subsequentes.
A restauração desse estado permite que as sessões subsequentes renunciem à configuração tediosa ou demorada e cheguem diretamente à experiência focal.
Salvando o estado das ferramentas de bloqueio mundial
Antes de ser carregado, o Estado Congelado deve ser salvo.
A maneira mais simples de salvar o Estado Congelado é habilitar o Salvamento Automático no Gerenciador de Ferramentas de Bloqueio Mundial, seja no inspetor Unity no contexto das Ferramentas de Bloqueio Mundial ou em tempo de execução via script.
A configuração do estado do World Locking Tools Manager por meio de script é executada primeiro obtendo o estado, alterando-o da maneira desejada e, em seguida, definindo o estado de volta como um bloco. Por exemplo, para alternar o recurso Salvamento Automático:
var settings = WorldLockingManger.GetInstance().Settings;
settings.AutoSave = !settings.AutoSave;
WorldLockingManager.GetInstance().Settings = settings;
Se a funcionalidade Guardar Automaticamente passar de ativada para desativada durante uma sessão, não serão tentadas mais gravações periódicas. Se passar de desativado para ativado, os salvamentos periódicos serão iniciados ou retomados.
O recurso Salvamento Automático manterá um estado salvo atualizado salvando periodicamente o estado atual de forma assíncrona.
Se for necessário mais controle sobre o tempo de salvamento do estado, o AutoSave pode ser definido como false e o salvamento manual pode ser feito via script. O salvamento assíncrono é facilmente acionado, como:
WorldLockingManager.GetInstance().Save();
Como o salvamento é assíncrono, outras tentativas de invocar Save()
enquanto um salvamento anterior ainda está em andamento serão ignoradas.
Carregando Estado Congelado
Tendo salvo um Estado Congelado, pode ser desejável recarregar as Ferramentas de Bloqueio Mundial de volta a esse estado, seja em uma sessão subsequente ou até mesmo mais tarde na mesma sessão.
Como encontramos com o salvamento do Estado Congelado, há dois caminhos para o estado de carregamento.
Se o sinalizador AutoLoad no World Locking Tools Manager estiver ativado, qualquer estado salvo anteriormente será carregado no momento da inicialização. Se não houver nenhum estado salvo para carregar, nenhum erro será gerado e a inicialização prosseguirá como se o sinalizador não estivesse definido.
Definir o sinalizador AutoLoad de false para true (por exemplo, via script) no tempo de execução não terá efeito. O AutoLoad acontece na carga inicial ou não acontece de todo.
No entanto, uma carga pode ser iniciada a partir do script a qualquer momento através da função Load do World Locking Tools Manager:
WorldLockingManager.GetInstance().Load();
Tal como acontece com a opção Guardar, a carga é executada de forma assíncrona. Quaisquer chamadas subsequentes para Carregar enquanto uma ainda estiver em andamento serão ignoradas.
O que é salvo?
Os dados necessários para reconstruir o mapeamento das World Locking Tools - ou seja, o alinhamento do mundo virtual com o mundo real - podem ser divididos em quatro grupos.
Âncoras espaciais: A rede subjacente de âncoras espaciais criadas e mantidas internamente pelo Anchor Manager da World Locking Tools fornece a ligação necessária ao mundo real. Essas âncoras são mantidas por meio do mecanismo de armazenamento subjacente da plataforma.
Estado do motor: O estado do mecanismo é mantido para permitir que o mecanismo retome seu mapeamento atual. Restaurar este estado remove indeterminações como a pose inicial da cabeça na(s) sessão(ões) anterior(es).
Fixação de espaço: Se o aplicativo tiver aplicado mais pinos de espaço para forçar o alinhamento das coordenadas de modelagem com o mundo real em um conjunto discreto de pontos, esse mapeamento também será mantido.
Espaço de coordenadas: As Ferramentas de Bloqueio Mundial persistem o espaço de coordenadas em relação ao mundo físico, salvando um gráfico interno de âncoras espaciais locais.
O que não está salvo?
As configurações não são salvas e as Ferramentas de Bloqueio Mundial não salvam nem restauram objetos de aplicativos individuais. Apenas o estado é salvo. Quaisquer alterações de configuração feitas pelo aplicativo - por exemplo, alterações feitas por meio da API WorldLockingManager - são redefinidas para seus valores, conforme definido no Unity Inspetor cada vez que o aplicativo é iniciado. Ou, se eles não estiverem definidos no Inspetor, eles serão definidos com seus valores padrão no código.
Por exemplo, digamos que o aplicativo queira apresentar ao usuário a opção de AutoSave World Locking state e fazer com que a preferência do usuário persista nas sessões até ser alterada. Em seguida, o pedido deve:
- Apresente ao usuário a experiência do usuário para definir a preferência de Salvamento Automático (presumivelmente com outras configurações do aplicativo).
- Encaminhe a preferência do usuário para o WorldLockingManager.
- Registre a preferência para o arquivo (presumivelmente com outras configurações do aplicativo).
- Na inicialização do aplicativo, carregue a preferência salva (se alguma tiver sido salva) e encaminhe para WorldLockingManager.
Consulte as notas em WorldLockingContext sobre problemas de tempo ao misturar a configuração de estado entre ativos e script.