Unity3D ArgumentOutOfRangeException: индекс был вне диапазона - PullRequest
1 голос
/ 14 марта 2019

У меня проблема с моим кодом.Остановка компилятора на этой строке, когда я пытаюсь поднять объект.

ekwipunek.ListaNaszychPrzedmiotow[i] = BazaDanych_Eq.ListaPrzedmiotow [IdPrzedmiotu];

ArgumentOutOfRangeException: индекс был вне диапазона.Должен быть неотрицательным и меньше размера коллекции.

if ( Input.GetKeyDown (KeyCode.Q))
{
    IdPrzedmiotu = DoPodniesienia.GetComponent<PrzedmiotPodniesienie>().id;
    for (int i = 0; i < ekwipunek.ListaNaszychPrzedmiotow.Count; i++)
    {
        if (ekwipunek.ListaNaszychPrzedmiotow[i].id == 0 && DoPodniesienia != null)
        {
            ekwipunek.ListaNaszychPrzedmiotow[i] = BazaDanych_Eq.ListaPrzedmiotow [IdPrzedmiotu];
            Destroy(DoPodniesienia);
            DoPodniesienia = null;
         }
     }
}

1 Ответ

2 голосов
/ 14 марта 2019

Ваша проблема, скорее всего, существует, потому что один из ваших индексов в этой строке ссылается на то, что находится за пределами диапазона коллекции.

Вы устанавливаете эту переменную, которая используется в качестве индекса для идентификатора.

 IdPrzedmiotu = DoPodniesienia.GetComponent<PrzedmiotPodniesienie>().id;

Затем вы ссылаетесь на него ниже, не проверяя, доступен ли он в вашей коллекции.

 BazaDanych_Eq.ListaPrzedmiotow [IdPrzedmiotu]

Вам необходимо проверить это значение или эту коллекцию, прежде чем получить к ней доступ.


Совет по отладке в будущем: ArgumentOutOfRangeException

  • Проверьте количество любой коллекции, которую вы используете
  • Проверьте значение любого индекса, который вы будете использовать для ссылки на коллекцию

public class YourClass
{
    ...
    Debug.Log($"The collection \"ListaNaszychPrzedmiotow\" is {ListaNaszychPrzedmiotow.Count()}");
    Debug.Log($"The index value of \"i\" is {i}");
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...