Как отрисовать массив элементов с помощью цикла for
нужна помощь. У меня есть карточки монстров, которые привязаны к конкретным объектам. Мне надо, чтобы при вызове метода AddEnemyToQueue(EnemyName) проверялось, есть ли карточка с таким именем в папке Resources и если MatchInArray != null, то поместить карточку с именем этого врага в лист ListElements<GameObjects> и отрисовать каждый элемент из этого списка с помощью цикла for.
Пусть, есть бесконечное количество команд AddEnemyToQueue, тогда и количество элементов<GameObject> в нем бесконечно, для этого есть переменная int MaxElements = x, которая ограничивает отрисовку элементов в Unity, чтобы не отрисовывать бесконечное количество элементов.
При отрисовке всех элементовListElements<GameObject> выдается следующая ошибка.
ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
public List<GameObject> ListElements = new List<GameObject>();
public string[] TileNames = new string[] { };
TileNames = Directory.GetFiles(TileNamesPath);
private void AddEnemyToQueue(string EnemyName)
{
//Check if Tile with enemy name exists
var MatchInArray = TileNames.Where(item => item.Contains(EnemyName)).FirstOrDefault();
if (MatchInArray != null)
{
ListElements.Add(Resources.Load<GameObject>(TilePrefabDir+EnemyName));
for (int l = 0; l < MaxElements; l++)
{
GameObject ListElement = Instantiate(ListElements[l]);
ListElement.transform.SetParent(ContentContainer.transform, false);
ListElement.name = l.ToString();
}
}
}
Первая карточка с индексом [0] символизирует врага на поле с которым дерется игрок
Ответы (1 шт):
Выход за границы массива. Наверняка в ListElements количество элементов меньше, чем указано в MaxElements. Смотрите в отладчике что у вас в MaxElements и совпадает ли это число с количеством в списке. А если не уверены, то надо перед циклом делать проверку о совпадаении количества, либо в цикле, если l меньше количества, то делать break