Undopro ist ein befehlsbasiertes Rückgängigungssystem, das in das Standardsystem von Unity integriert ist. Auf diese Weise können Entwickler Aktionen für ihre Rückgänger-/Wiederherstellungsvorgänge verwenden, ohne den Benutzer in einen neuen Rückgängigmaterial zu zwingen!
Forum Thread
Abhängig davon, wie Sie Ihr Tool verwenden möchten, haben Sie mehrere Optionen.
Unity liefert nur sehr begrenzte Informationen über das Rückgängigungssystem:
Innen erstellt undopro erstellt einen Dummy-Datensatz im Standardsystem, wenn die API zum Hinzufügen eines Befehlsbasis aufgerufen wird. Dies wird dann mit dem verfügbaren Rückruf verfolgt und die Befehle werden ausgeführt, wenn sie aus dem Wiederherstellungsstapel bzw. umgekehrt umschalten. Ein großer Hurden war das Verhalten des Standard -Rückgabesystems: Es ist fast unvorhersehbar! Datensätze können unter bestimmten Bedingungen duplizieren, wenn sie rückgängig gemacht/redone oder verschwinden. Es ist sehr schwer, aber eine Anforderung, einen soliden Tracking -Algorithmus zu erstellen. Offensichtlich muss auch die Hinzufügung neuer Aufzeichnungen erkannt werden.
Bei der Verfolgung wurde ein Verschiebungswert sowohl für rückgängig gemacht als auch für den Wiederherstellungsstapel separat berechnet (denken Sie daran, dass die Aufzeichnungen während des Rückgängigkeits/Wiederherstellungen verschwinden oder duplizieren können!). Die internen Datensätze werden dann entsprechend aktualisiert und die Aufzeichnungen zum Rückgängigmachen/Redo werden beschrieben.
Unter all dem werden die zusätzlichen Rückrufe aufgerufen, die aufgerufen wurden/Onredoperformed/OnaddundoreCord.
Serialisierung ist auch ein großes Problem, da Aktionen und noch schlimmere anonyme Handlungen schwer zu serialisieren sind. Undopro unterhält ein verstecktes, temporäres GameObject in der aktuellen Szene, die alle benutzerdefinierten Datensätze enthält, die serialisiert werden müssen. Die Serialisierung wird durch einige Wrapper -Klassen erreicht, die jede Kombination für Aktionen, Objekte, Methoden usw. intelligent behandeln
Dieses System kann sogar im Allgemeinen verwendet werden! -> unterstützt alle serialisierbaren Objekte (von unityEngine.object und System.Object) und unverzählbarer Objekte teilweise (eine leichte Serialisierungselement -Serialisierung). Alle anderen Objekte erhalten standardmäßig -> stützt selbst die meisten anonymen Aktionen (noch keine nicht sertialisierbaren gefundenen Objekte)! Sie können den Kontext und die Referenz fast alle lokalen Variablen (oben beschriebene Bedingungen anwenden) voll verwenden!
Dieses System scheint zuverlässig zu sein, aber ich behaupte nicht, dass es völlig kugelsicher ist! Der schlimmste Fall, der passieren kann, wenn es die Nachverfolgung durcheinander bringt, ist, dass Ihre Datensätze um einen kleinen Betrag ausgeglichen werden (Aktionen werden nach/früher ein oder zwei Datensätze ausgeführt). Derzeit ist zum Glück keine solche Situation bekannt, aber ich haftet nicht für Fehler! Wenn Sie es schaffen, es zu brechen, benachrichtigen Sie mich bitte darüber und geben Sie mir Informationen darüber, was Sie getan haben (durch Probleme), und ich versuche, dies zu beheben :)
Setzen Sie einfach den undopro -Ordner irgendwo in Ihr Projekt ein und Sie können loslegen! Auch wenn es nicht im Editorordner sein muss, heißt es nicht, dass Sie es zur Laufzeit verwenden können! Funktionen, die die Editor -API erfordern, werden zur Laufzeit von Präprozessorenprüfungen ausgeschlossen. Im Editorordner hingegen finden Sie zwei nützliche Fenster, um die Funktionalität von 1 zu testen. Das Rückgabesystem selbst und 2. Serialisierungssystem. Zusammen mit diesen Fenstern können Sie das System problemlos selbst debuggen, um zu sehen, wie es funktioniert, indem Sie #Define Unrückgast in undoopromanager inkonfitieren! Um einfach das Aktions -Serialisierungssystem für Ihr eigenes Projekt zu verwenden, kopieren Sie natürlich den Ordner undopro/serializableAction zusammen mit der Lizenz natürlich!
Die API für Entwickler ist sehr einfach. Fügen Sie die undopro -Abhängigkeit hinzu und verwenden Sie dann den UNDOPROMAGER, um mit dem System zu interagieren. Wichtige Elemente:
Empfehlung: Wenn Sie etwas berechnet oder einen Betrieb mit einem Zwischenergebnis durchgeführt haben, ist es sehr einfach, dies einzurichten, sofern das Ergebnis serialisierbar ist. Anstatt in den Rückgängig-/Wiederherstellungsaktionen neu zu berechnen, setzen Sie nur das vorherige serialisierbare Ergebnis in der undo -Aktion und der neuen in der Redo -Aktion. Erledigt!
Diese Erweiterung wurde von Senal erstellt und wird im Rahmen der MIT -Lizenz veröffentlicht (weiter in Lizenz.MD)