prefabのbuttonをCanvasに追加する

「prefabのbuttonをCanvasに追加する」の編集履歴(バックアップ)一覧はこちら

prefabのbuttonをCanvasに追加する - (2015/09/03 (木) 14:10:53) の最新版との変更点

追加された行は緑色になります。

削除された行は赤色になります。

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!"); }

表示オプション

横に並べて表示:
変化行の前後のみ表示: