GameObject canvas; void Start () { canvas = GameObject.Find("Canvas"); Button bt=Resources.Load<Button>("Button"); Button bt1 = Instantiate( bt ); bt1.onClick.AddListener( ()=> onButtonClick(1) ); bt1.transform.SetParent( canvas.transform,false ); } void onButtonClick(int no) { if(no==1) Debug.Log("click!"); } AddListenerに引数を追加する方法をググったけどやり方が分からず ということで、UnityActionとして、関数を呼び出す手続きを登録する手法で上手く行きました。 これで、ボタンを動的に生成しつつ、クリックした時の処理は一つの関数でまとめて定義できます。 動的にボタンを複数作って、位置も指定する GameObject canvas; void Start () { canvas = GameObject.Find("Canvas"); Button bt=Resources.Load<Button>("Button"); Button[] btt=new Button[10]; for(int i=0;i<=4;i++) { btt[i] = makeButton(bt,"Ans"+i.ToString(),0f,50f*i); btt[i].onClick.AddListener( ()=> onButtonClick(i) ); } } void Update () { } Button makeButton(Button bt,string s,float x,float y) { Button bt1 = Instantiate( bt ); bt1.transform.SetParent( canvas.transform,false ); RectTransform _rt = bt1.GetComponent<RectTransform>(); Vector2 pos = _rt.anchoredPosition; pos.y = Screen.height * 0.5f - _rt.rect.height * 0.5f - y; pos.x = x; _rt.anchoredPosition = pos; foreach (Transform child in bt1.transform){ if(child.name == "Text"){ Text target = child.gameObject.GetComponent<Text>(); target.text = s; } } return bt1; } void onButtonClick(int no) { if(no==1) Debug.Log("click!"); }