回答編集履歴

1

ItemObjectInspectorに変更記録処理を追加

2022/12/24 00:43

投稿

Bongo
Bongo

スコア10807

test CHANGED
@@ -54,6 +54,13 @@
54
54
 
55
55
  Hoge myTarget = (Hoge)target;
56
56
 
57
+ // 変更記録用の処理を用意しておき...
58
+ void Record()
59
+ {
60
+ Undo.RecordObject(myTarget, "Inspector");
61
+ EditorUtility.SetDirty(myTarget);
62
+ }
63
+
57
64
  if (myTarget.customHoge != null)
58
65
  {
59
66
  if (myTarget.hogeType == Hoge.HogeType.A)
@@ -61,11 +68,22 @@
61
68
  if (myTarget.customHoge is CustomHogeA hoge)
62
69
  {
63
70
  EditorGUILayout.LabelField("CustomHogeA");
71
+
72
+ // customHogeの値を書き換えるときは、値が変更されているか確認して
73
+ // 変更されていればRecordを行ってから書き換えるようにしました
64
- hoge.hogeA1 = EditorGUILayout.IntField("A1", hoge.hogeA1);
74
+ var newValue = EditorGUILayout.IntField("A1", hoge.hogeA1);
75
+ if (newValue != hoge.hogeA1)
76
+ {
77
+ Record();
78
+ hoge.hogeA1 = newValue;
79
+ }
65
80
  }
66
81
  else
67
82
  {
68
83
  Debug.Log("New CustomHogeA");
84
+
85
+ // customHoge自体を差し替えるときにもRecordを行いました
86
+ Record();
69
87
  myTarget.customHoge = new CustomHogeA();
70
88
  }
71
89
  }
@@ -74,11 +92,21 @@
74
92
  if (myTarget.customHoge is CustomHogeB hoge)
75
93
  {
76
94
  EditorGUILayout.LabelField("CustomHogeB");
95
+
96
+ // ここも同様の処置を行いました
77
- hoge.hogeB1 = EditorGUILayout.FloatField("B1", hoge.hogeB1);
97
+ var newValue = EditorGUILayout.FloatField("B1", hoge.hogeB1);
98
+ if (newValue != hoge.hogeB1)
99
+ {
100
+ Record();
101
+ hoge.hogeB1 = newValue;
102
+ }
78
103
  }
79
104
  else
80
105
  {
81
106
  Debug.Log("New CustomHogeB");
107
+
108
+ // ここも同様の処置を行いました
109
+ Record();
82
110
  myTarget.customHoge = new CustomHogeB();
83
111
  }
84
112
  }
@@ -86,6 +114,9 @@
86
114
  else
87
115
  {
88
116
  EditorGUILayout.LabelField("CustomHogeがない");
117
+
118
+ // ここも同様の処置を行いました
119
+ Record();
89
120
  myTarget.customHoge = new CustomHoge();
90
121
  }
91
122