undopro是一個集成到Unity的默認系統中的基於命令的撤消系統。這允許開發人員在不強迫用戶進入新的撤消工作流的情況下使用動作進行撤消/重做操作!
論壇線程
根據您如何使用dopro /分發工具的方式,您有幾個選擇。
Unity僅提供有關撤消系統的非常有限的信息:
在內部,當調用用於添加基於命令的記錄的API時,dopro在默認系統中創建虛擬記錄。然後使用可用回調跟踪此操作,並在分別從重做堆棧或另一種方式切換時執行命令。一個很大的障礙是默認撤消系統的行為:這幾乎是不可預測的!當撤消/重做或消失時,記錄可能會在某些條件下複製。這非常困難,但是必須進行堅實的跟踪算法。顯然,還必須檢測到新記錄。
跟踪完成後,計算撤消和重做堆棧的移位值(請記住,記錄在撤消/重做過程中可能會消失或重複!)。然後對內部記錄進行相應的更新,並概述了“撤消/重做的記錄”。
在所有這些過程中,調用了indundoperformed/onredoperformed/onaddundorecord的其他回調。
序列化也是一個很大的問題,因為行動甚至更糟的匿名動作都難以序列化。 undopro在當前場景中維護一個隱藏的,臨時的遊戲對象,該場景擁有所有需要序列化的自定義記錄。序列化是由一些包裝器類實現的,這些類別巧妙地處理了操作,對象,方法等的所有組合。
該系統甚至可以通常使用! - >支持所有可序列化對象(unityEngine.Object和system.Object)和不可啟動的對象部分(一層可序列化的構件序列化),所有其他對像都會默認 - >支持最匿名的操作(尚未找到難以驗證的操作)!您可以完全使用上下文並參考幾乎所有本地變量(上面概述的條件適用)!
這個系統似乎確實可靠,但我不聲稱它是完全防彈的!當它弄亂跟踪時,可能發生的最壞情況是,您的記錄被少量抵消(操作是在/之前/之前執行一個或兩個記錄)。目前尚未知道幸運的情況,但我對任何失敗都不承擔任何責任!如果您設法打破它,請通知我,並為我提供您所做的事情(通過問題),我嘗試解決此問題:)
只需將undopro文件夾放在項目中的某個地方,就可以了!即使它不必在編輯器文件夾中,但這並不意味著您可以在運行時使用它!在運行時將需要編輯器API的功能由預處理器檢查排除。另一方面,在編輯器文件夾中,您會發現兩個有用的窗口來測試1的功能。撤消系統本身和2。動作序列化系統。除了這些窗口外,您還可以輕鬆地調試系統,以查看它是如何通過不使用#Define undo_debug在Unpopromanager中的工作的!為了為自己的項目使用“操作序列化系統”,只需複製文件夾undopro/serializableAction以及許可證!
開發人員的API非常簡單。添加undopro依賴性,然後使用Unepropomanager與系統相互作用。重要元素:
建議:如果您計算了某些內容或執行了具有中間結果的任何操作,則可以很容易地設置此結果,只要結果可序列化即可。與其重新計算在撤消/重做動作中,只是在撤消動作中設置了先前的序列化結果,而在重做動作中則設置了新的動作。完畢!
此擴展名是由Seneral創建的,並根據MIT許可發布(在License.MD中進一步指定)