回答編集履歴
3
不要なコードが誤って含まれてしまったため除去
test
CHANGED
@@ -122,8 +122,6 @@
|
|
122
122
|
|
123
123
|
{
|
124
124
|
|
125
|
-
var v = UnityEngine.Events.UnityEventCallState.Off;
|
126
|
-
|
127
125
|
var buttons = FindObjectsOfType<Button>();
|
128
126
|
|
129
127
|
|
2
空行の入れ方を修正
test
CHANGED
@@ -49,6 +49,8 @@
|
|
49
49
|
var onClickEvent = button.onClick;
|
50
50
|
|
51
51
|
var persistentEventCount = onClickEvent.GetPersistentEventCount();
|
52
|
+
|
53
|
+
|
52
54
|
|
53
55
|
for (var i = 0; i < persistentEventCount; i++)
|
54
56
|
|
@@ -134,6 +136,8 @@
|
|
134
136
|
|
135
137
|
var persistentEventCount = onClickEvent.GetPersistentEventCount();
|
136
138
|
|
139
|
+
|
140
|
+
|
137
141
|
for (var i = 0; i < persistentEventCount; i++)
|
138
142
|
|
139
143
|
{
|
@@ -148,9 +152,11 @@
|
|
148
152
|
|
149
153
|
{
|
150
154
|
|
155
|
+
var b = button; // buttonを別の変数にコピーし...
|
156
|
+
|
157
|
+
|
158
|
+
|
151
159
|
onClickEvent.SetPersistentListenerState(i, UnityEngine.Events.UnityEventCallState.Off);
|
152
|
-
|
153
|
-
var b = button; // buttonを別の変数にコピーし...
|
154
160
|
|
155
161
|
onClickEvent.AddListener(() =>
|
156
162
|
|
1
注意点を追記
test
CHANGED
@@ -103,3 +103,69 @@
|
|
103
103
|
|
104
104
|
|
105
105
|
コード内にもコメントしましたが、一つひとつメソッド引数を設定するのが面倒でしたら、スクリプトからイベントハンドラーを追加することも可能ですので、そういった方法を検討してみてもいいかもしれません。
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
[追記]
|
110
|
+
|
111
|
+
ちょっと注意点を思い出しましたので念のため追記しますが、古いバージョンのUnityですと、コード中でコメントアウトした「多数のボタンに動的にアクション追加」をやると、どのボタンをクリックしても表示される名前が同じになってしまうかもしれません。
|
112
|
+
|
113
|
+
下記のように、`button`をforeachブロック内の適当な変数に代入し直して、それをアクション内で参照するようにすれば多分旧バージョンでも対応可能かと思います...
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
```C#
|
118
|
+
|
119
|
+
private void Start()
|
120
|
+
|
121
|
+
{
|
122
|
+
|
123
|
+
var v = UnityEngine.Events.UnityEventCallState.Off;
|
124
|
+
|
125
|
+
var buttons = FindObjectsOfType<Button>();
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
foreach (var button in buttons)
|
130
|
+
|
131
|
+
{
|
132
|
+
|
133
|
+
var onClickEvent = button.onClick;
|
134
|
+
|
135
|
+
var persistentEventCount = onClickEvent.GetPersistentEventCount();
|
136
|
+
|
137
|
+
for (var i = 0; i < persistentEventCount; i++)
|
138
|
+
|
139
|
+
{
|
140
|
+
|
141
|
+
var methodName = onClickEvent.GetPersistentMethodName(i);
|
142
|
+
|
143
|
+
var target = onClickEvent.GetPersistentTarget(i);
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
if (methodName == "PrintSenderName" && target == this)
|
148
|
+
|
149
|
+
{
|
150
|
+
|
151
|
+
onClickEvent.SetPersistentListenerState(i, UnityEngine.Events.UnityEventCallState.Off);
|
152
|
+
|
153
|
+
var b = button; // buttonを別の変数にコピーし...
|
154
|
+
|
155
|
+
onClickEvent.AddListener(() =>
|
156
|
+
|
157
|
+
{
|
158
|
+
|
159
|
+
this.PrintSenderName(b); // buttonの代わりにbを使う
|
160
|
+
|
161
|
+
});
|
162
|
+
|
163
|
+
}
|
164
|
+
|
165
|
+
}
|
166
|
+
|
167
|
+
}
|
168
|
+
|
169
|
+
}
|
170
|
+
|
171
|
+
```
|