O UNDOPRO é um sistema de desfazer baseado em comando integrado ao sistema padrão da Unity. Isso permite que os desenvolvedores usem ações para suas operações de desfazer/refazer sem forçar o usuário a um novo fluxo de trabalho de desfazer!
Tópico do fórum
Dependendo de como você deseja usar o UNDOPRO / Distribuir sua ferramenta, você tem várias opções.
A unidade fornece apenas informações muito limitadas sobre o sistema de desfazer:
Internamente, o UNDOPRO cria um registro dummy no sistema padrão quando a API para adicionar um registro baseada em comando é chamada. Isso é rastreado usando o retorno de chamada disponível e os comandos são executados quando eles mudarem da pilha de refazer ou o contrário, respectivamente. Um grande Hurden foi o comportamento do sistema de desfazer padrão: é quase imprevisível! Os registros podem duplicar em certas condições quando desfeito/refeito ou desaparecer. É muito difícil, mas um requisito para criar um algoritmo de rastreamento sólido. Obviamente, a adição de novos registros também deve ser detectada.
Quando o rastreamento foi feito, um valor de mudança para desfazer e refazer a pilha seperamente é calculado (lembre -se, os registros podem desaparecer ou duplicar durante o desfazer/refazer!). Os registros internos são atualizados de acordo e os registros para desfazer/refazer são descritos.
No caminho de tudo isso, são chamados os retornos de chamada adicionais do ONUNDOUNFORMED/ONRODOPERMED/ONADDundRecord.
A serialização também é um grande problema, pois ações e ações anônimas ainda piores são difíceis de serializar. O UNDOPRO mantém um objeto de jogo oculto e temporário na cena atual que mantém todos os registros personalizados que precisam ser serializados. A serialização é alcançada por algumas classes de wrapper que lidam de maneira inteligente todas as combinações de ações, objetos, métodos etc.
Este sistema pode até ser usado em geral! -> Suporta todos os objetos serializáveis (de UnityEngine.Object e System.Object) e objetos não -interpretáveis parcialmente (uma serialização de membros serializáveis de uma camada), todos os outros objetos são inadimplentes -> suporta até a maioria das ações anônimas (não é encontrado ainda não -agrícola)! Você pode usar totalmente o contexto e referenciar quase todas as variáveis locais (as condições descritas acima se aplicam)!
Este sistema parece confiável, mas não afirmo que é completamente à prova de balas! O pior caso que pode acontecer quando isso atrapalha o rastreamento é que seus registros são compensados por uma pequena quantidade (as ações são executadas um ou dois registros depois/antes). Atualmente, não existe uma situação conhecida felizmente, mas não me responsabilizo por nenhuma falha! Se você conseguir quebrá -lo, notifique -me sobre isso e me forneça informações sobre o que você fez (por meio de problemas) e eu tento corrigir isso :)
Simplesmente coloque a pasta undopro em algum lugar do seu projeto e você está pronto para ir! Mesmo que não precise estar na pasta do editor, isso não significa que você possa usá -lo em tempo de execução! A funcionalidade que requer a API do editor é excluída em tempo de execução por verificações de pré -processador. Na pasta Editor, por outro lado, você encontra duas janelas úteis para testar a funcionalidade de 1. O próprio sistema de desfazer e 2. O sistema de serialização de ação. Juntamente com essas janelas, você pode depurar o sistema facilmente para ver como ele funciona, não Para usar apenas o sistema de serialização de ação para o seu próprio projeto, basta copiar a pasta UNDOPRO/SERIALIZABLEACTION junto com a licença, é claro!
A API para desenvolvedores é muito simples. Adicione a dependência undapro e use o não -romanador para interagir com o sistema. Elementos importantes:
Recomendação: Se você calculou algo ou executou qualquer operação com um resultado intermediário, é muito fácil configurar isso, desde que o resultado seja serializável. Em vez de recalcular nas ações de desfazer/refazer, basta definir o resultado serializável anterior na ação de desfazer e a nova na ação refazer. Feito!
Esta extensão foi criada pelo Seneral e é publicada sob a licença do MIT (mais especificada em licença.md)