Есть массив игровых объектов, которые уничтожаются после столкновения с коллайдером. Есть код в виде цикла for
, который проходит по каждому элементу массива и увеличивает int
переменную на 1, если элемент массива равен null
. Далее по коду, вызывается следующий метод, который передаёт int
переменную в качестве параметра и внутри него сравнивается, если переданный параметр соответствует другой int
переменной, то загружаем следующий уровень.
Суть проблемы заключается в том, что во время выполнения игры, когда запускается проверка элементов массива, Unity вызывает ошибку Index was outside the bounds of the array
. Я со своей стороны не могу понять, с чем это связанно. Полный код скрипта ниже:
[SerializeField]
private int sumDeathSitizen, needToEndLvl; // Переменная sumDeathSitizen запоминает, сколько было уничтожено игровых объектов. needToEndLvl указывается внутри редактора Unity. Отвечает за то, сколько должно быть уничтожено игровых объектов
[SerializeField]
private GameObject[] Victims; // Массив игровых объектов
public void died (int d)
{
if (d == needToEndLvl)
{
loadNextScene();
}
else
{
Debug.Log("Task not end");
}
}
public void canEndLvl()
{
for (int i = 0; i <= needToEndLvl; i++)
{
if (Victims[i] == null)
{
sumDeathSitizen = sumDeathSitizen + 1;
}
}
Debug.Log("EndSum");
died(sumDeathSitizen);
}
private void loadNextScene()
{
int scene = SceneManager.GetActiveScene().buildIndex;
scene = scene + 1;
SceneManager.LoadScene(scene, LoadSceneMode.Single);
}
По задумке, когда игрок выполняет или не выполняет определённые действия по уничтожению игровых объектов, необходимо подойти к двери и попытаться открыть её. Когда выполняется действие открытие двери, сперва вызывается метод canEndLvl()
который, как описывалось выше, проходит циклом for
по массиву игровых элементов. Если все объекты уничтожены, то текущая сцена заканчивается и загружается следующая. Как я уже говорил выше, не смотря на то, что результат при уничтожении объектов суммируется верный, Unity упирается в строчку if (Victims[i] == null)
с ошибкой Index was outside the bounds of the array
и не передаёт значение дальше для сравнения и загрузки нового уровня. Что я делаю не так?
Как я понял needToEndLvl
показывает количество объектов, которое надо уничтожить, например 4. И, например, у вас 4 игровых объекта в массиве. Тогда у вас ошибка в цикле, в последней итерации вы обращаетесь к Victims[4]
, т.е. к 5 элементу, которого не существует. Надо так: for (int i = 0; i < needToEndLvl; i++)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Ребята помогите!!!))) Подскажите как мне добавить к объекту выборки поле quantity
Какой возвращаемый тип должен быть для getInstance