UNDOPRO est un système UNDO basé sur des commandes intégré dans le système par défaut d'Unity. Cela permet aux développeurs d'utiliser des actions pour leurs opérations d'annulation / refaire sans forcer l'utilisateur à un nouveau débit de travail!
Fil de forum
Selon la façon dont vous souhaitez utiliser undopro / distribuer votre outil, vous avez plusieurs options.
Unity ne fournit que des informations très limitées sur le système d'annulation:
En interne, UNDOPRO crée un enregistrement factice dans le système par défaut lorsque l'API pour l'ajout d'un enregistrement basé sur des commandes est appelée. Ceci est ensuite suivi à l'aide du rappel disponible et les commandes sont exécutées lorsqu'ils passent respectivement de la pile de rénovations ou de l'inverse. Un grand Hurden était le comportement du système d'annulation par défaut: il est presque imprévisible! Les enregistrements peuvent dupliquer dans certaines conditions lorsqu'ils sont annulés / refaits ou disparaître. C'est très difficile, mais une exigence pour faire un algorithme de suivi solide. De toute évidence, l'ajout de nouveaux enregistrements doit également être détecté.
Lorsque le suivi a été effectué, une valeur de décalage pour la pile d'annulation et de rénovation en séparation est calculée (rappelez-vous, les enregistrements peuvent disparaître ou dupliquer pendant l'annulation / refaire!). Les enregistrements internes sont ensuite mis à jour en conséquence et les enregistrements à annuler / refaire sont décrits.
Sur le chemin de tout cela, les rappels supplémentaires sur OunDoperformed / OnRedEperformed / OnAddunDoreCord sont appelés.
La sérialisation est également un gros problème, car les actions, et les actions anonymes encore pires, sont difficiles à sérialiser. UNDOPRO maintient un GameObject temporaire caché dans la scène actuelle qui contient tous les enregistrements personnalisés qui doivent être sérialisés. La sérialisation est réalisée par quelques classes d'emballage qui gèrent intelligemment toutes les combinaisons pour les actions, les objets, les méthodes, etc.
Ce système peut même être utilisé généralement! -> prend en charge tous les objets sérialisables (de UnityEngine.Object et System.Object) et des objets non sérialisables partiellement (une sérialisation des membres en sérialisable d'une couche), tous les autres objets sont encore par défaut -> prend en charge la plupart des actions anonymes (aucune insérialitable encore insérialisable)! Vous pouvez utiliser pleinement le contexte et la référence presque toutes les variables locales (les conditions décrites ci-dessus s'appliquent)!
Ce système semble fiable mais je ne prétends pas qu'il est complètement à l'épreuve des balles! Le pire des cas qui puisse se produire lorsqu'il gâche le suivi, c'est que vos enregistrements sont compensés par un petit montant (les actions sont exécutées un ou deux enregistrements après / avant / avant). Il n'y a actuellement aucune situation de ce type, heureusement, je ne prends aucune responsabilité pour les échecs! Si vous parvenez à le casser, veuillez m'en informer et me fournir des informations sur ce que vous avez fait (par le biais de problèmes) et j'essaie de résoudre ce problème :)
Mettez simplement le dossier undopro quelque part dans votre projet et vous êtes prêt à partir! Même si cela ne doit pas être dans le dossier de l'éditeur, cela ne signifie pas que vous pouvez l'utiliser à l'exécution! Les fonctionnalités nécessitant l'API de l'éditeur sont exclues au moment de l'exécution par vérification du préprocesseur. Dans le dossier Editor, en revanche, vous trouvez deux fenêtres utiles pour tester les fonctionnalités de 1. Le système d'annulation lui-même et 2. Le système d'action de sérialisation. Parallèlement à ces fenêtres, vous pouvez facilement déboguer le système vous-même pour voir comment il fonctionne par non-écominant #define undo_debug dans undopromanager! Afin d'utiliser simplement le système d'action de sérialisation pour votre propre projet, copiez simplement le dossier undopro / serializableAction avec la licence bien sûr!
L'API pour les développeurs est très simple. Ajoutez la dépendance UNDOPRO, puis utilisez undopromanager pour interagir avec le système. Éléments importants:
Recommandation: Si vous avez calculé quelque chose ou effectué une opération avec un résultat intermédiaire, il est très facile de configurer cela à condition que le résultat soit sérialisable. Au lieu de recalculer dans les actions UNDO / Remo, définissez simplement le résultat sérialisable précédent dans l'action d'annulation et la nouvelle dans l'action de rétablissement. Fait!
Cette prolongation a été créée par Sénéral et est publiée dans le cadre de la licence du MIT (spécifiée en outre dans Licence.md)