Делаю школьный проект на свободную тему. Решил сделать игру-викторину. Пишу в юнити на 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” и прикрепил его к кнопке “математика”. Второй скрипт получился такой:
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. в программировании я практически ноль. Я думал, что создать игру будет гораздо проще,но ошибся, сдавать проект через несколько дней, а я не знаю что делать.
UPD: писал всё с помощью гайдов на ютубе.(я знаю, что так ничему нормально не научится, если не знать базу. Но я бы не успел всё сделать, начав бы учить С# с нуля.)