回答編集履歴
3
追記
test
CHANGED
@@ -203,3 +203,35 @@
|
|
203
203
|
```
|
204
204
|
|
205
205
|
みたいな感じでスクリプトでリスナーを追加することもできます。
|
206
|
+
|
207
|
+
|
208
|
+
|
209
|
+
|
210
|
+
|
211
|
+
今回はイベントリスナーの引数としてタプルを使いましたが、下記のようなイベント情報格納用のクラスを用意して受け渡すほうがいいかもしれません。
|
212
|
+
|
213
|
+
```C#
|
214
|
+
|
215
|
+
public class PropertyChangedEventArgs
|
216
|
+
|
217
|
+
{
|
218
|
+
|
219
|
+
public LearningMode oldvalue { get; }
|
220
|
+
|
221
|
+
public LearningMode newvalue { get; }
|
222
|
+
|
223
|
+
|
224
|
+
|
225
|
+
public PropertyChangedEventArgs(LearningMode oldvalue, LearningMode newvalue)
|
226
|
+
|
227
|
+
{
|
228
|
+
|
229
|
+
this.oldvalue = oldvalue;
|
230
|
+
|
231
|
+
this.newvalue = newvalue;
|
232
|
+
|
233
|
+
}
|
234
|
+
|
235
|
+
}
|
236
|
+
|
237
|
+
```
|
2
変更
test
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
UnityEventを使ってやってみました。
|
2
2
|
|
3
|
+
(11/10 古い値、新しい値を渡していなかったのでソース変更)
|
4
|
+
|
5
|
+
|
6
|
+
|
3
7
|
|
4
8
|
|
5
9
|
Dropdownにアタッチしたスクリプト
|
@@ -36,7 +40,9 @@
|
|
36
40
|
|
37
41
|
|
38
42
|
|
39
|
-
[SerializeField] public UnityEvent<LearningMode> OnPropertyChanged = new UnityEvent<LearningMode>();
|
43
|
+
[SerializeField] public UnityEvent<(LearningMode oldvalue, LearningMode newvalue)> OnPropertyChanged = new UnityEvent<(LearningMode oldvalue, LearningMode newvalue)>();
|
44
|
+
|
45
|
+
|
40
46
|
|
41
47
|
|
42
48
|
|
@@ -58,9 +64,15 @@
|
|
58
64
|
|
59
65
|
{
|
60
66
|
|
67
|
+
var oldvalue = _State;
|
68
|
+
|
69
|
+
var newvalue = value;
|
70
|
+
|
71
|
+
|
72
|
+
|
61
73
|
_State = value;
|
62
74
|
|
63
|
-
OnPropertyChanged.Invoke(
|
75
|
+
OnPropertyChanged.Invoke((oldvalue, newvalue));
|
64
76
|
|
65
77
|
}
|
66
78
|
|
@@ -148,11 +160,11 @@
|
|
148
160
|
|
149
161
|
|
150
162
|
|
151
|
-
public void PropertyChangedHandler(PCB_LM_StateMgr.LearningMode value)
|
163
|
+
public void PropertyChangedHandler((PCB_LM_StateMgr.LearningMode oldvalue, PCB_LM_StateMgr.LearningMode newvalue) values)
|
152
|
-
|
164
|
+
|
153
|
-
{
|
165
|
+
{
|
154
|
-
|
166
|
+
|
155
|
-
textbox.text=$"{value}";
|
167
|
+
textbox.text = $"{values.oldvalue}→{values.newvalue}";
|
156
168
|
|
157
169
|
}
|
158
170
|
|
1
追記
test
CHANGED
@@ -36,7 +36,7 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
|
39
|
-
[SerializeField] p
|
39
|
+
[SerializeField] public UnityEvent<LearningMode> OnPropertyChanged = new UnityEvent<LearningMode>();
|
40
40
|
|
41
41
|
|
42
42
|
|
@@ -173,3 +173,21 @@
|
|
173
173
|
|
174
174
|
|
175
175
|
これでプロパティが変化したときにOnPropertyChangedが発生し、そのイベントでTextが変化します。
|
176
|
+
|
177
|
+
|
178
|
+
|
179
|
+
|
180
|
+
|
181
|
+
インスペクタ上での設定ではなく
|
182
|
+
|
183
|
+
```C#
|
184
|
+
|
185
|
+
var drop = GameObject.Find("TestDropdown");
|
186
|
+
|
187
|
+
var script = drop.GetComponent<PCB_LM_StateMgr>();
|
188
|
+
|
189
|
+
script.OnPropertyChanged.AddListener(PropertyChangedHandler);
|
190
|
+
|
191
|
+
```
|
192
|
+
|
193
|
+
みたいな感じでスクリプトでリスナーを追加することもできます。
|