2016-09-04 14 views
0

私は次のように4つのボタンがあります。私はまた、私は1つの機能を持っているスクリプトの下でボタンから情報を得るには?

に私のスクリプトをアタッチゲームオブジェクトを持って

enter image description here

を、そのボタンのテキストを印刷する必要があり、とき私はonClick()ボタンで使用します。

インスペクタユーザーがクリックした、別のボタンの上に一つの関数を呼び出すと、それらのボタンのテキストをプリントアウトする方法

enter image description here

答えて

1

stringをコールバック関数に渡す代わりに、Buttonインスタンス自体を渡す方が理にかなっています。これを行うと、将来必要に応じてButtonからさらに多くのデータにアクセスすることができます。

public Button[] Btn; 

void OnEnable() 
{ 
    //Register Button Events 
    for (int i = 0; i < Btn.Length; i++) 
    { 
     int btIndex = i; 
     Btn[i].onClick.AddListener(() => buttonCallBack(Btn[btIndex])); 
    } 
} 

private void buttonCallBack(Button buttonPressed) 
{ 
    Debug.Log(buttonPressed.GetComponentInChildren<Text>().text); 

    if (buttonPressed == Btn[0]) 
    { 
     //Your code for button 1 
    } 

    if (buttonPressed == Btn[1]) 
    { 
     //Your code for button 2 
    } 

    if (buttonPressed == Btn[2]) 
    { 
     //Your code for button 3 
    } 

    if (buttonPressed == Btn[3]) 
    { 
     //Your code for button 4 
    } 
} 

void OnDisable() 
{ 
    //Un-Register Button Events 
    for (int i = 0; i < Btn.Length; i++) 
    { 
     Btn[i].onClick.RemoveAllListeners(); 
    } 
} 

それでもボタンのテキストのみを渡したい場合は、次の

public Button[] Btn; 

void OnEnable() 
{ 
    //Register Button Events 
    for (int i = 0; i < Btn.Length; i++) 
    { 
     int btIndex = i; 
     string btText = Btn[btIndex].GetComponentInChildren<Text>().text; 
     Btn[i].onClick.AddListener(() => buttonCallBack(btText)); 
    } 
} 

private void buttonCallBack(string buttonText) 
{ 
    Debug.Log(buttonText); 
} 

void OnDisable() 
{ 
    //Un-Register Button Events 
    for (int i = 0; i < Btn.Length; i++) 
    { 
     Btn[i].onClick.RemoveAllListeners(); 
    } 
} 

エディタでButtonsからBtn変数のスロットを割り当てることを忘れないでくださいまたはあなたがnull例外エラーが発生します。

+0

...これはあなたを助けることを願っていますが、私はその、そのない良い方法だと思う約300のボタンがあります。 – NewHacker

+0

300個のボタンがあり、それらから 'Text'だけが必要な場合は、私の答えに2番目の解決策を使用してください。コードは常に同じで、イベントは自動的に登録され、登録されなくなります。ところで、それはなぜそれを行う良い方法ではないと思いますか? – Programmer

+0

申し訳ありません私のために働く2番目の解決策を見ていないありがとう:) – NewHacker

1

リスト内のすべてのボタンを取ります。スクリプトButton.csを作成し、そのスクリプトでは、各UIボタンに

をそれを与える1つのパブリックメソッドを作る

public void OnButtonClickListener(int index) { 
    // Do your code here for button click using its index 
} 

今、あなたはちょうどこのパブリックメソッドに各UIボタンのコールバックを割り当て、引数を渡す必要がボタンのインデックスの

私は感謝

関連する問題