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