Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2021, 17:51   #1
glebss
Новичок
Джуниор
 
Регистрация: 30.01.2021
Сообщений: 1
По умолчанию ошибка:IndexOutOfRangeException: Index was outside the bounds of the array

Делаю школьный проект на свободную тему. Решил сделать игру-викторину. Пишу в юнити на C#
Игра начинается с главного меню. После нажатия на кнопку “выезжает” панель выбора предметов (предметов 8 ). Я планировал написать практически идентичный скрипт для каждой кнопки выбора предметов. Первым предметом стало обществознание. Я написал скрипт. (Social Skript)
Код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class SocialSkript : MonoBehaviour
{
    public SocialList[] questions;
    public Text[] answersText;
    public Text qText;
    public GameObject qnapanel;

    List<object> qList;
    SocialList crntQ;
    int randQ;

    public void OnClickPlay()
    {
        qList = new List<object>(questions);
        questionGenerate();
        if (!qnapanel.GetComponent<Animator>().enabled) qnapanel.GetComponent<Animator>().enabled = true;
        else qnapanel.GetComponent<Animator>().SetTrigger("Inn");
    }
    void questionGenerate()
    {
        if (qList.Count > 0)
        {
            randQ = Random.Range(0, qList.Count);
            crntQ = qList[randQ] as SocialList;
            qText.text = crntQ.question;
            List<string> answers = new List<string>(crntQ.answers);
            for (int i = 0; i < crntQ.answers.Length; i++)
            {
                int rand = Random.Range(0, answers.Count);
                answersText[i].text = answers[rand];
                answers.RemoveAt(rand);
            }
        }
        else
        {
            print("Вы прошли игру!");
        }
    }
    public void AnswersBttns(int index)
    {
        if (answersText[index].text.ToString() == crntQ.answers[0]) print("Правильный ответ");
        else print("Неправильный ответ");
        qList.RemoveAt(randQ);
        questionGenerate();
    }
}
[System.Serializable]
public class SocialList
{
    public string question;
    public string[] answers = new string[4];
}
Прикрепил его к Кнопке "обществознание" и всё работало. Затем с помощью копипаста я написал второй скрипт, отличавшийся только тем, что массив "SosialList" я заменил на "MathList" и прикрепил его к кнопке "математика". Второй скрипт получился такой: MathSkript
Код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class MathSkript : MonoBehaviour
{
    public MathList[] questions;
    public Text[] answersText;
    public Text qText;
    public GameObject qnapanel;

    List<object> qList;
    MathList crntQ;
    int randQ;

    public void OnClickPlay()
    {
        qList = new List<object>(questions);
        questionGenerate();
        if (!qnapanel.GetComponent<Animator>().enabled) qnapanel.GetComponent<Animator>().enabled = true;
        else qnapanel.GetComponent<Animator>().SetTrigger("Inn");
    }
    void questionGenerate()
    {
        if (qList.Count > 0)
        {
            randQ = Random.Range(0, qList.Count);
            crntQ = qList[randQ] as MathList;
            qText.text = crntQ.question;
            List<string> answers = new List<string>(crntQ.answers);
            for (int i = 0; i < crntQ.answers.Length; i++)
            {
                int rand = Random.Range(0, answers.Count);
                answersText[i].text = answers[rand];
                answers.RemoveAt(rand);
            }
        }
        else
        {
            print("Вы прошли игру!");
        }
    }
    public void AnswersBttns(int index)
    {
        if (answersText[index].text.ToString() == crntQ.answers[0]) print("Правильный ответ");
        else print("Неправильный ответ");
        qList.RemoveAt(randQ);
        questionGenerate();
    }
}
[System.Serializable]
public class MathList
{
    public string question;
    public string[] answers = new string[4];
}
После этого при нажатии на кнопку “математика” пишется ошибка:IndexOutOfRangeException: Index was outside the bounds of the array.
MathSkript.questionGenerate () (at Assets/Skripts/MathSkript.cs:35)
MathSkript.OnClickPlay () (at Assets/Skripts/MathSkript.cs:20).
Помогите пожалуйста.
P.S. в программировании я практически ноль. Я думал, что создать игру будет гораздо проще,но ошибся, сдавать проект через несколько дней, а я не знаю что делать.
glebss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка List index out of bounds (0) Smagulov85 Общие вопросы Delphi 2 10.07.2013 21:25
ошибка List index out of bounds (0) Natalie023 Помощь студентам 9 17.12.2011 19:27
Ошибка List Index out of bounds Rapala Помощь студентам 1 03.05.2010 17:33
Ошибка List index of bounds(1) Blue Heron Помощь студентам 5 17.03.2010 00:38
ошибка:List index out of bounds tanek Помощь студентам 7 26.12.2009 20:38