Как изменить текст каждого родительского дочернего компонента более эффективным? Unity C#

Я нашел более эффективный код для поиска каждого дочернего объекта из родительского игрового объекта и изменения каждого дочернего компонента Текст игрового объекта.

Каждый дочерний компонент Text объекта gameobject имеет свое значение, зависящее от переменной.

Это скриншот

Это мой код:

public Dictionary <string, GameObject> product = new Dictionary<string, GameObject>();
    public Dictionary <string, Text> property = new Dictionary<string, Text> ();

dex = productMargaret.FindIndex(j => j.productID == 15);
            product["Mayonnaise"] = GameObject.Find("btnMayonnaise");

            property["qty"] = gameObject.transform.GetChild (1).GetComponent<Text> (); //+ productMargaret[dex].qty.ToString;
            property["qty"].text = productMargaret[dex].qty.ToString;
            property["price"] = gameObject.transform.GetChild (2).GetComponent<Text> (); //+ productMargaret[dex].price.ToString;
            property["price"].text = "@ " + productMargaret[dex].price.ToString;
            property["have"] =  gameObject.transform.GetChild (2).GetComponent<Text> (); //+ productMargaret[dex].have.ToString;
            property["have"].text = "You Have : " + productMargaret[dex].have.ToString;

Это код не работает.

Как это сделать? Для эффективного способа, как, возможно, использовать цикл.

Спасибо

2 ответа

Решение

Я нашел решение сам.

Это два видео объясняют все о проблеме

https://www.youtube.com/watch?v=gjFsrVWQaQw

https://www.youtube.com/watch?v=rL36b6lo4-k

Предполагая, что ваши кнопки имеют имена типа btnProductID_15, btnProductID_16, btnProductID_17 и к ним прикреплен компонент Button. Вы можете просто сделать что-то вроде родительского gameObject:

public Dictionary <string, string> property = new Dictionary<string, Text> (); //the Key would be btnProductID_15...btnProductID_N and value will be the label of the button.
List<Button> btnList = GetComponentsInChildren<Button>();
foreach (Button item in btnList)
{
   Text textField = GetComponentInChildren<Text>();
   textField.text = property[item.name];
}

Конечно, вы должны будете заполнить словарь "собственности" соответственно.... А теперь я голоден.

Другие вопросы по тегам