IndexOutOfRangeException: Index was outside the bounds of the array
Делаю игру по этому туториалу: https://www.youtube.com/watch?v=R897fzBmZOU&list=PLRHtm1zQx-f_iPJNssrmZFSj9H5a00e5I&index=7 Когда игрок получает ключ выдает ошибку.
Вот полный текст ошибки:
IndexOutOfRangeException: Index was outside the bounds of the array. Quests.OnTriggerEnter2D (UnityEngine.Collider2D other) (at Assets/Scripts/Quests.cs:15)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Quests : MonoBehaviour
{
public int questNumber;
public int[] items;
public GameObject[] clouds;
public GameObject barrier;
public GameObject key;
public void OnTriggerEnter2D(Collider2D other)
{
if(other.tag != "Player" && other.gameObject.GetComponent<Pickup>().id == items[questNumber])
{
questNumber++;
Destroy(other.gameObject);
CheckQuest();
}
}
public void CheckQuest()
{
for (int i = 0; i < clouds.Length; i++)
{
if(i == questNumber)
{
clouds[i].SetActive(true);
clouds[i].GetComponent<Animator>().SetTrigger("isTrigger");
}
else
{
clouds[i].SetActive(false);
}
}
if(questNumber == 3)
{
barrier.SetActive(false);
}
if(questNumber == 4)
{
key.SetActive(true);
}
}
}
Ответы (1 шт):
Надо учиться писать код самостоятельно. Туториалы хороши, когда кроме бездумного копирования кода хотя-бы немного его понимаешь.
Индекс questNumber у вас имеет значение больше, чем количество элементов в массиве items. При попытке обратиться к несуществующему элементу массива возникает указанное исключение.
Обратите внимание, что в C# индексы массивов начинаются с 0, а не с 1. Например для массива из 3 элементов валидные индексы: 0, 1 и 2.