質問するログイン新規登録

回答編集履歴

3

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

2018/01/14 01:45

投稿

Bongo
Bongo

スコア10818

answer CHANGED
@@ -60,7 +60,6 @@
60
60
  ```C#
61
61
  private void Start()
62
62
  {
63
- var v = UnityEngine.Events.UnityEventCallState.Off;
64
63
  var buttons = FindObjectsOfType<Button>();
65
64
 
66
65
  foreach (var button in buttons)

2

空行の入れ方を修正

2018/01/14 01:45

投稿

Bongo
Bongo

スコア10818

answer CHANGED
@@ -24,6 +24,7 @@
24
24
  {
25
25
  var onClickEvent = button.onClick;
26
26
  var persistentEventCount = onClickEvent.GetPersistentEventCount();
27
+
27
28
  for (var i = 0; i < persistentEventCount; i++)
28
29
  {
29
30
  // onClickに登録されているメソッド名とターゲットを調べ...
@@ -66,6 +67,7 @@
66
67
  {
67
68
  var onClickEvent = button.onClick;
68
69
  var persistentEventCount = onClickEvent.GetPersistentEventCount();
70
+
69
71
  for (var i = 0; i < persistentEventCount; i++)
70
72
  {
71
73
  var methodName = onClickEvent.GetPersistentMethodName(i);
@@ -73,8 +75,9 @@
73
75
 
74
76
  if (methodName == "PrintSenderName" && target == this)
75
77
  {
78
+ var b = button; // buttonを別の変数にコピーし...
79
+
76
80
  onClickEvent.SetPersistentListenerState(i, UnityEngine.Events.UnityEventCallState.Off);
77
- var b = button; // buttonを別の変数にコピーし...
78
81
  onClickEvent.AddListener(() =>
79
82
  {
80
83
  this.PrintSenderName(b); // buttonの代わりにbを使う

1

注意点を追記

2018/01/14 01:34

投稿

Bongo
Bongo

スコア10818

answer CHANGED
@@ -50,4 +50,37 @@
50
50
 
51
51
  ![インスペクタ](11d783d366895d952a0bea50b8212092.png)
52
52
 
53
- コード内にもコメントしましたが、一つひとつメソッド引数を設定するのが面倒でしたら、スクリプトからイベントハンドラーを追加することも可能ですので、そういった方法を検討してみてもいいかもしれません。
53
+ コード内にもコメントしましたが、一つひとつメソッド引数を設定するのが面倒でしたら、スクリプトからイベントハンドラーを追加することも可能ですので、そういった方法を検討してみてもいいかもしれません。
54
+
55
+ [追記]
56
+ ちょっと注意点を思い出しましたので念のため追記しますが、古いバージョンのUnityですと、コード中でコメントアウトした「多数のボタンに動的にアクション追加」をやると、どのボタンをクリックしても表示される名前が同じになってしまうかもしれません。
57
+ 下記のように、`button`をforeachブロック内の適当な変数に代入し直して、それをアクション内で参照するようにすれば多分旧バージョンでも対応可能かと思います...
58
+
59
+ ```C#
60
+ private void Start()
61
+ {
62
+ var v = UnityEngine.Events.UnityEventCallState.Off;
63
+ var buttons = FindObjectsOfType<Button>();
64
+
65
+ foreach (var button in buttons)
66
+ {
67
+ var onClickEvent = button.onClick;
68
+ var persistentEventCount = onClickEvent.GetPersistentEventCount();
69
+ for (var i = 0; i < persistentEventCount; i++)
70
+ {
71
+ var methodName = onClickEvent.GetPersistentMethodName(i);
72
+ var target = onClickEvent.GetPersistentTarget(i);
73
+
74
+ if (methodName == "PrintSenderName" && target == this)
75
+ {
76
+ onClickEvent.SetPersistentListenerState(i, UnityEngine.Events.UnityEventCallState.Off);
77
+ var b = button; // buttonを別の変数にコピーし...
78
+ onClickEvent.AddListener(() =>
79
+ {
80
+ this.PrintSenderName(b); // buttonの代わりにbを使う
81
+ });
82
+ }
83
+ }
84
+ }
85
+ }
86
+ ```