2018.1.6f1現象ScriptabelObjectを継承しない自作クラスの参照を持っている状態でRedoを行うと、正しく参照が保持されない。こちらの記事で指摘されている現象です。http://sassembla.github.io/Public/2015:09:17%203-14-23/2015:09:17%203-14-23.html原因データの持ち方に問題がある。実験ScriptableObjectを継承したTestDocumentクラスを作成。EditorWindow内にフィールド(doc)として保持。TestDocument内に何種類かデータを保持。Node")にてUndo、Redoを行う。Undo、Redoでデータがどうなるか簡単に調査。}こちらはprivate以外はUndo、Redo共に問題ありませんでした。privateについてはUndo、Redoで値が変更されません。ConnectionList;クラスについてはprivateは実験しませんでした。SerializeFieldもpublicもどちらもUndo、Redoで更新されます。}と、Nodeクラスへの参照を持っているわけですが、Nodeクラスが[System.Serializable]によってシリアライズ対象になっているときは、ConnectionをUndoで削除した後のRedo時にNodeがnewで生成されてしまいます。NodeクラスがScriptableObjectを継承することによりシリアライズされている場合はコネクションの再生成時に、docで管理されているnodeListの中にあるNodeへの参照を設定してくれます。その際、コネクションがScriptableObjectでなく[System.Serializable]でも問題はありませんが、コネクションが参照される可能性も含めてScriptableObjectにしておいた方が良いでしょう。実験はしていないのですが、おそらくdoc単位でUndoしているので正しく参照関係を保持して戻してくれているのでしょう。確かにぱっと見では正しく動いているように見えるので、浮いたノードを参照しているコネクション経由でノードへ変更をかけるアクセスをしない限り発覚しないので怖いですね。結論Undo、Redoを行う変数は、publicで宣言するか[SerializeField]を設定するUndo、Redoの対象となる自作クラスはScriptableObjectを継承しておくUndoで記録する際は参照範囲にあるオブジェクトを纏めて放り込むを心がけておくと良いかと思います。引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。