Unity编辑器 - Undo的坑
编辑器通过脚本中改变值,Undo.RecordObject可能会无效,应该使用:
Undo.RegisterCompleteObjectUndo(Object objectToUndo, string name)
该方法会记录对象的完整状态的拷贝。
The Unity documentation has been updated since:
https://docs.unity3d.com/ScriptReference/Undo.RegisterCompleteObjectUndo.html
https://docs.unity3d.com/ScriptReference/Undo.RegisterFullObjectHierarchyUndo.htmlUndo.RegisterCompleteObjectUndo(Object objectToUndo, string name) will
record a copy of the full state of the object that it will keep,
unlike Undo.RecordObject(Object objectToUndo, string name) that will
only keep a copy of the state until the end of the frame to compute a
diff.By the way, I just got the following error that drove me to find more
on this method:Generating diff of this object for undo because the type tree changed.
This happens if you have used Undo.RecordObject when changing the
script property. Please use Undo.RegisterCompleteObjectUndoSo RegisterCompleteObjectUndo seems important in complex situations
were a diff is not possible.Undo.RegisterFullObjectHierarchyUndo will indeed copy the state of a
game object and all its children and components, but it will react
differently with different kind of objects. The documentation gives
more details on this