


Unity как можно реализовать логику перезапуска скрипта?
У меня есть скрипт викторины, если ответишь на вопрос не правильно то появится кнопка перезапуска, у меня есть метод RestartGame который сбрасывает текущие очки и обновляет рекорд очков если он больше прошлого, напиши логику перезапуска метода RestartGame который используется кнопкой которая появляется если неправильно ответить, мне нужно чтобы при использовании этого метода кнопкой счет сбрасывался и викторина начиналась сначала, массив с следующими вопросами обновлялся а массив с уже использованными вопросами обнулялся
Если что скрипт делал по гайду с некоторыми изменениями от чат жпт но он бессилен в этом вопросе или я его плохо использую, вот код
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class GameScript : MonoBehaviour
{
public QuestionList[] questions;
public Text[] answersText;
public Text qText;
public Image MainPicture;
public GameObject headPanel;
private int score = 0;
private int highScore = 0;
public Text scoreText;
public Text highScoreText;
public GameObject restartButton;
List<object> qList;
QuestionList crntQ;
int randQ;
public void OnClickPlay()
{
qList = new List<object>(questions);
questionGenerate();
if (!headPanel.GetComponent<Animator>().enabled) headPanel.GetComponent<Animator>().enabled = true;
else headPanel.GetComponent<Animator>().SetTrigger("in");
}
void questionGenerate()
{
if (qList.Count > 0)//если список вопросов больше 0 то они будут появлятся
{
randQ = Random.Range(0, qList.Count);
crntQ = qList[randQ] as QuestionList;
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);
MainPicture.sprite = crntQ.pictire[0];
}
}
else
{
print("Вы прошли игру");//иначе вы прошли игру
}
}
public void AnswersBttns(int index)
{
if (answersText[index].text.ToString() == crntQ.answers[0])
{
print("Ответ правильный");
score += 100; // увеличиваем счетчик на 100
scoreText.text = score.ToString(); // обновляем текстовое поле с текущими очками
}
else
{
print("Неправильный ответ");
restartButton.SetActive(true); // показываем кнопку перезапуска
}
qList.RemoveAt(randQ);
questionGenerate();
}
public void RestartGame()
{
score = 0;
scoreText.text = score.ToString();
if (score > highScore) // проверяем, является ли текущее количество очков новым рекордом
{
highScore = score; // обновляем значение рекорда
highScoreText.text = highScore.ToString(); // обновляем текстовое поле с рекордом
}
restartButton.SetActive(false); // скрываем кнопку перезапуска
// добавьте код для перезапуска игры здесь
// например, можно использовать SceneManager.LoadScene("GameSceneName") для перезагрузки текущей сцены
}
}
[System.Serializable]
public class QuestionList
{
public string question;
public Sprite[] pictire;
public string[] answers = new string[3];
}
Для перезапуска игры в методе RestartGame() вы можете использовать SceneManager.LoadScene("GameSceneName") для перезагрузки текущей сцены. Вам также нужно обновить массив с вопросами и обнулить массив с уже использованными вопросами. Вы можете добавить следующий код в конце метода RestartGame():
qList = new List<object>(questions);
questionGenerate();
Этот код создаст новый список вопросов и сгенерирует новый вопрос. Вы также можете добавить дополнительную логику для обнуления массива с уже использованными вопросами, если это необходимо.