Unity编辑器 - Undo的坑

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.html

Undo.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.RegisterCompleteObjectUndo

So 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

原文地址

猜你喜欢

转载自blog.csdn.net/ltycloud/article/details/79367902