Unity5.0.1にてプレハブから動的に生成したボタンにイベントを指定して、ボタンが押されたら「push ボタンオブジェクト名」といった感じにログに出力したいのですが、どのボタンを押しても最後のボタンの名前が表示されてしまいます。
おそらく参照を渡しているからだと思っているのですが、上記の動作を実現するにはどうしたらよいでしょうか?また、何が起こっているのかも教えていただけるとありがたいです。
lang
1using UnityEngine; 2using System.Collections; 3using UnityEngine.UI; 4using UnityEngine.Events; 5 6public class ScrollController : MonoBehaviour { 7 8 [SerializeField] 9 RectTransform prefab = null; 10 11 void Start () { 12 for (int i=0; i<15; i++) { 13 var item = GameObject.Instantiate(prefab) as RectTransform; 14 item.SetParent(transform, false); 15 item.name = "Node" + i.ToString(); 16 var text = item.GetComponentInChildren<Text>(); 17 text.text = "item:" + i.ToString(); 18 } 19 20 foreach (Transform child in transform) { 21 Button button = child.GetComponent<Button>(); 22 Debug.Log ("make " + child.name); 23 UnityAction onClickAction = () => Debug.Log ("push " + child.name); 24 button.onClick.AddListener(onClickAction); 25 } 26 } 27}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。