Member 14662029 Ответов: 1

Indexoutofrangeexception: индекс находился за пределами массива. Gamemanager.start () (at assets/! adnan/_scripts/manager/gamemanager.cs:42)


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour
{
    #region Instance.
    public static GameManager Instance
    {
        get
        {
            if (instance == null)
            {
                GameObject go = new GameObject();
                go.AddComponent<GameManager>();
                instance = go.GetComponent<GameManager>();
            }
            return instance;
        }
    }
    private static GameManager instance;
    #endregion

    public Transform Player;
    public bool IsLevelCompleted;
    public GameObject[] levels;
    public int CurrentLevelNo;
    private void Awake()
    {
        instance = this;
    }

    private void Start()
    {
       
        CurrentLevelNo = PlayerPrefs.GetInt(Prefs.CurrentLevelNo, 0);
        Player = GameObject.FindGameObjectWithTag(Tags.Player).transform;
        Player = FindObjectOfType<RCC_CarControllerV3>().transform;
        Debug.Log(levels);
        levels[CurrentLevelNo].SetActive(true);
    }


    #region LevelPassed.
    public UnityEvent LevelPassedEvents;
    public UnityEvent LevelFailedEvents;
    public void FncLevelPassed(bool isPassed)
    {
        if (!IsLevelCompleted)
        {
            IsLevelCompleted = true;

            if (isPassed)
            {
                CurrentLevelNo += 1;
                if (CurrentLevelNo > levels.Length) CurrentLevelNo = levels.Length - 1;
                  //CurrentLevelNo = Mathf.Clamp(CurrentLevelNo, 0, levels.Length);
                PlayerPrefs.SetInt(Prefs.CurrentLevelNo, CurrentLevelNo);

                if (LevelPassedEvents != null && LevelPassedEvents.GetPersistentEventCount() > 0)
                {
                    LevelPassedEvents.Invoke();
                }
              
            }
            else
            {
                if (LevelFailedEvents != null && LevelFailedEvents.GetPersistentEventCount() > 0)
                {
                    LevelFailedEvents.Invoke();
                }
            }
        }
    }
    #endregion
}


Что я уже пробовал:

Дорогие все,

У меня есть вопрос, который я получил ниже сообщения об ошибке…

Назначение : индекс находился за пределами массива.

Как я могу это исправить? извините за расплывчатый вопрос но с моими способностями это лучшее что я мог бы описать подробно…

1 Ответов

Рейтинг:
10

jimmson

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


Member 14662029

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