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 шт):

Автор решения: aepot

Надо учиться писать код самостоятельно. Туториалы хороши, когда кроме бездумного копирования кода хотя-бы немного его понимаешь.

Индекс questNumber у вас имеет значение больше, чем количество элементов в массиве items. При попытке обратиться к несуществующему элементу массива возникает указанное исключение.

Обратите внимание, что в C# индексы массивов начинаются с 0, а не с 1. Например для массива из 3 элементов валидные индексы: 0, 1 и 2.

→ Ссылка