UNDOPRO es un sistema de deshacer basado en comandos integrado en el sistema predeterminado de Unity. ¡Esto permite que los desarrolladores usen acciones para sus operaciones de deshacer/rehacer sin obligar al usuario a un nuevo flujo de trabajo deshuesado!
Foro
Dependiendo de cómo desee usar UNDOPRO / Distribuir su herramienta, tiene varias opciones.
Unity proporciona solo información muy limitada sobre el sistema UNDO:
Internamente, Undopro crea un registro ficticio en el sistema predeterminado cuando se llama a la API para agregar un registro basado en comandos. Luego se rastrea utilizando la devolución de llamada disponible y los comandos se ejecutan cuando cambian de la pila de rehacer o al revés respectivamente. Un gran Hurden fue el comportamiento del sistema de deshacer predeterminado: ¡es casi impredecible! Los registros pueden duplicar en ciertas condiciones cuando se desaniman o se renovan o desaparecen. Es muy difícil, pero es un requisito para hacer un algoritmo de seguimiento sólido. Obviamente, también se debe detectar la adición de nuevos registros.
Cuando se ha realizado el seguimiento, se calcula un valor de cambio para deshacer y rehacer por separado (¡recuerde, los registros pueden desaparecer o duplicar durante la deshacer/rehacer!). Los registros internos se actualizan en consecuencia y se describen los registros para deshacer/rehacer.
En el camino de todo esto, se llaman a las devoluciones de llamada adicionales onundoperFormed/Onedoperformed/Onaddundorecord.
La serialización también es un gran problema, ya que las acciones, y las acciones anónimas aún peores, son difíciles de serializar. Un UndoPro mantiene un GameObject temporal oculto en la escena actual que contiene todos los registros personalizados que deben ser serializados. La serialización se logra mediante algunas clases de envoltura que manejan de manera inteligente cada combinación de acciones, objetos, métodos, etc.
¡Este sistema se puede usar en general! -> Admite todos los objetos serializables (tanto de UnityEngine.Object y System.Object) y los objetos no justificables parcialmente (una capa de serialización de miembro serializable), ¡todos los demás objetos obtienen un valor predeterminado -> admite incluso la mayoría de las acciones anónimas (aún no se encuentran no esencializable)! ¡Puede usar completamente el contexto y hacer referencia a casi todas las variables locales (se aplican las condiciones descritas anteriormente)!
¡Este sistema parece confiable, pero no afirmo que es completamente a prueba de balas! Sin embargo, el peor de los casos que puede suceder cuando arruina el seguimiento es que sus registros se compensan con una pequeña cantidad (las acciones se ejecutan uno o dos registros después/antes). ¡Actualmente no existe tal situación conocida afortunadamente, pero no recibo ninguna responsabilidad por fallas! Si logra romperlo, notifíqueme al respecto y proporcione información de lo que ha hecho (a través de problemas) e intento solucionar esto :)
¡Simplemente coloque la carpeta Undopro en algún lugar de su proyecto y está listo para comenzar! ¡Aunque no tiene que estar en la carpeta del editor, no significa que pueda usarlo en tiempo de ejecución! La funcionalidad que requiere que la API del editor esté excluida en tiempo de ejecución por verificaciones del preprocesador. En la carpeta del editor, por otro lado, encuentra dos ventanas útiles para probar la funcionalidad de 1. El sistema de deshacer en sí y 2. El sistema de serialización de acción. ¡Junto con estas ventanas, puede depurar el sistema fácilmente para ver cómo funciona sin commentando #define odo_debug en un indopromanager! Para usar el sistema de serialización de acción para su propio proyecto, ¡simplemente copie la carpeta no opro/serializableAction junto con la licencia por supuesto!
La API para desarrolladores es muy simple. Agregue la dependencia de Undopro y luego use un inopolador para interactuar con el sistema. Elementos importantes:
Recomendación: si calculó algo o realizó cualquier operación con un resultado intermedio, es muy fácil establecer esto siempre que el resultado sea serializable. En lugar de recalcular en las acciones de deshacer/rehacer, simplemente establecer el resultado de serializable anterior en la acción de deshacer y la nueva en la acción de rehacer. ¡Hecho!
Esta extensión fue creada por Seneral y se publica bajo la licencia MIT (especificada en la licencia. MD)