私は次のように4つのボタンがあります。私はまた、私は1つの機能を持っているスクリプトの下でボタンから情報を得るには?
に私のスクリプトをアタッチゲームオブジェクトを持って
を、そのボタンのテキストを印刷する必要があり、とき私はonClick()ボタンで使用します。
インスペクタユーザーがクリックした、別のボタンの上に一つの関数を呼び出すと、それらのボタンのテキストをプリントアウトする方法
?
私は次のように4つのボタンがあります。私はまた、私は1つの機能を持っているスクリプトの下でボタンから情報を得るには?
に私のスクリプトをアタッチゲームオブジェクトを持って
を、そのボタンのテキストを印刷する必要があり、とき私はonClick()ボタンで使用します。
インスペクタユーザーがクリックした、別のボタンの上に一つの関数を呼び出すと、それらのボタンのテキストをプリントアウトする方法
?
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
例外エラーが発生します。
リスト内のすべてのボタンを取ります。スクリプトButton.csを作成し、そのスクリプトでは、各UIボタンに
をそれを与える1つのパブリックメソッドを作る
public void OnButtonClickListener(int index) {
// Do your code here for button click using its index
}
今、あなたはちょうどこのパブリックメソッドに各UIボタンのコールバックを割り当て、引数を渡す必要がボタンのインデックスの
私は感謝
...これはあなたを助けることを願っていますが、私はその、そのない良い方法だと思う約300のボタンがあります。 – NewHacker
300個のボタンがあり、それらから 'Text'だけが必要な場合は、私の答えに2番目の解決策を使用してください。コードは常に同じで、イベントは自動的に登録され、登録されなくなります。ところで、それはなぜそれを行う良い方法ではないと思いますか? – Programmer
申し訳ありません私のために働く2番目の解決策を見ていないありがとう:) – NewHacker