UndoPro-это командная система Undo, интегрированная в систему Unity по умолчанию. Это позволяет разработчикам использовать действия для своих операций Undo/Redo, не заставляя пользователя в новый поток Undo Know!
Тема форума
В зависимости от того, как вы хотите использовать UndPro / распространять свой инструмент, у вас есть несколько вариантов.
Unity предоставляет лишь очень ограниченную информацию о системе Undo:
Внутренне, UndoPro создает фиктивную запись в системе по умолчанию, когда называется API для добавления записи на основе команды. Затем это отслеживается с использованием доступного обратного вызова, и команды выполняются, когда они переходят из стека REDO-RED или наоборот, соответственно. Большим Херденом было поведение системы отмены по умолчанию: она почти непредсказуемо! Записи могут дублироваться в определенных условиях при отмене/переделанном или исчезновении. Это очень сложно, но требуется солидный алгоритм отслеживания. Очевидно, что добавление новых записей также должно быть обнаружено.
Когда отслеживание было выполнено, рассчитывается значение сдвига как для отмены, так и для повторного стека (помните, записи могут исчезнуть или дублировать во время Undo/Redo!). Внутренние записи затем обновляются соответственно, и записи отмены/повторно изложены.
На пути всего этого называются дополнительные обратные вызовы Onundoperformed/onredoperformed/onaddundorecord.
Сериализация также является большой проблемой, поскольку действия и еще худшие анонимные действия трудно сериализовать. UndoPro поддерживает скрытый, временный GameObject в текущей сцене, которая содержит все пользовательские записи, которые необходимо сериализовать. Сериализация достигается несколькими классами обертки, которые разумно обрабатывают каждую комбинацию для действий, объектов, методов и т. Д.
Эта система может даже использоваться в целом! -> Поддерживает все сериализуемые объекты (как из UnityEngine.object, так и System.Object) и частично неэразируемых объектов (один сериализация сериализации элемента), все остальные объекты получают дефолт -> поддерживает даже большинство анонимных действий (пока не найдено невозможно)! Вы можете полностью использовать контекст и ссылку на почти все локальные переменные (применяются условия, изложенные выше)!
Эта система кажется надежной, но я не утверждаю, что она полностью защищена от пулена! В худшем случае, который может произойти, когда он испортит отслеживание, заключается в том, что ваши записи компенсируются небольшой суммой (действия выполняются одну или две записи после/до/до). К счастью, такой ситуации не известна, но я не несу ответственности за какие -либо неудачи! Если вам удастся сломать его, пожалуйста, сообщите мне об этом и предоставьте мне информацию о том, что вы сделали (через проблемы), и я пытаюсь это исправить :)
Проще говоря, поместите папку UndoPro где -нибудь в свой проект, и все готово! Несмотря на то, что это не должно быть в папке редактора, это не означает, что вы можете использовать его во время выполнения! Функциональность, требующая API редактора, исключаются во время выполнения с помощью препроцессорных проверок. С другой стороны, в папке редактора вы найдете два полезных окна для проверки функциональности 1. Сама система отмены и 2. Система сериализации действий. Наряду с этими окнами вы можете легко отлаживать систему самостоятельно, чтобы увидеть, как она работает, не покинув #define undo_debug в Undopromanager! Чтобы просто использовать систему сериализации Action для вашего собственного проекта, просто скопируйте папку UndoPro/SerializableAction вместе с лицензией, конечно!
API для разработчиков очень прост. Добавьте зависимость UndoPro, а затем используйте UndoPromanager для взаимодействия с системой. Важные элементы:
Рекомендация: если вы что -то рассчитали или выполнили какую -либо операцию с промежуточным результатом, это очень легко настроить, если результат является сериализуемым. Вместо того, чтобы пересчитать в действиях Undo/REDO, просто установите предыдущий сериализуемый результат в действие отмены и новое в повторном действии. Сделанный!
Это продление было создано Seneral и опубликовано по лицензии MIT (дополнительно указано в лицензии. MD)