Ошибка "Cannot implicitly convert type 'UnityEngine.UI.Text[]' to 'UnityEngine.UI.Text'" при добавлении в Text[] через цикл GetComponent()>
Есть массив объектов с текстом, который надо редактировать несколько раз, поэтому решил сохранить в массив Text[] (пробовал и через List<Text>), но выдает ошибку: "Cannot implicitly convert type 'UnityEngine.UI.Text[]' to 'UnityEngine.UI.Text'". Подскажете в чем проблема? (Через [SerializeField] конечно работает, но хотелось бы кодом).
[SerializeField] private GameObject[] plates;
private Text[] textPlate;
for(int i = 0; i < plates.Length; i++) textPlate[i] = plates[i].GetComponent<Text>();
Ответы (2 шт):
internal sealed class UpdateText
{
[SerializeField] private Text[] _texts;
private void Awake()
{
for (int iterator = 0; iterator < _texts.Length; iterator++)
_texts[iterator].text = $"{iterator}";
}
}
Рекомендую воспользоваться не GameObject а сразу компонентом Text. Так мы избавимся от лишних итераций попытки получения компонентов, копирования и аллоцирование лишних объемов памяти, для хранения ссылок.
Похоже, что ты не инициализировал массив textPlate. Когда ты создаёшь массив, ты должен указать его размер. Кроме того, код должен быть в методе или функции. В данном случае, это может быть метод Start() или Awake():
[SerializeField] private GameObject[] plates;
private Text[] textPlate;
void Start() {
textPlate = new Text[plates.Length];
for(int i = 0; i < plates.Length; i++) textPlate[i] = plates[i].GetComponent<Text>();
}
Вызывать GetComponent<Text>() для GameObject не всегда будет возвращать компонент Text, если на GameObject не настроен такой компонент. Если ты уверен, что каждый GameObject имеет компонент Text, тогда код должен работать. В противном случае, добавь проверку на null.
Также, убедись, что используешь пространство имен UnityEngine.UI для класса Text.
using UnityEngine;
using UnityEngine.UI;