prefabのbuttonをCanvasに追加する

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として、関数を呼び出す手続きを登録する手法で上手く行きました。
これで、ボタンを動的に生成しつつ、クリックした時の処理は一つの関数でまとめて定義できます。


動的にボタンを複数作って、位置も指定する
prefabのbuttonのheightが50なので、位置は50毎に指定する
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) );
	}
}
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!");
}
最終更新:2015年09月03日 14:11