回答編集履歴

3

不要なコードが誤って含まれてしまったため除去

2018/01/14 01:45

投稿

Bongo
Bongo

スコア10807

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

空行の入れ方を修正

2018/01/14 01:45

投稿

Bongo
Bongo

スコア10807

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

注意点を追記

2018/01/14 01:34

投稿

Bongo
Bongo

スコア10807

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
+ ```