У меня проблемы с выяснением ошибки.Моя игра инициализирует несколько очередей для хранения игровых подсказок, и в кнопке «Пуск» функция StartDialogue()
заполняет каждую из очередей и переходит к DisplayNext()
.Предполагается, что функция DisplayNext()
удаляет первую подсказку из определенных очередей и помещает их в диалоговые окна.После этого игрок выбирает правильную кнопку для ответа и вызывает DisplayNext()
для перехода к следующему запросу.
Однако моя проблема заключается в том, что мой счетчик sen_queue
устанавливает себя в 0, когда правильная кнопка вызываетDisplayNext()
.Отладочный выход сначала отображается 4, когда нажата «Старт», но когда нажата правильная кнопка, он отображает 0. При первом нажатии правильной кнопки он переходит к функции EndDialogue()
.Я приложил свой код ниже.Я понятия не имею, как это исправить, поэтому любая помощь будет принята с благодарностью!Огромное спасибо заранее!Однако моя проблема в том, что мой счетчик sen_queue
устанавливает себя в 0, когда правильная кнопка вызывает DisplayNext()
.Отладочный выход сначала отображается 4, когда нажата «Старт», но когда нажата правильная кнопка, он отображает 0. При первом нажатии правильной кнопки он переходит к функции EndDialogue()
.Я приложил свой код ниже.Я понятия не имею, как это исправить, поэтому любая помощь будет принята с благодарностью!Большое спасибо заранее!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class QuestionManager : MonoBehaviour
{
public Text dialogueText;
public Text topText;
public Text botText;
public Queue<string> sen_queue;
public Queue<string> top_queue;
public Queue<string> bot_queue;
public Queue<string> wrong_queue;
private bool prev_wrong;
public GameObject finalsaltwater;
public GameObject water;
public GameObject sand;
public GameObject salt;
public GameObject filtersand;
public GameObject platewater;
void Start()
{
Screen.SetResolution(1600, 900, true);
sen_queue = new Queue<string>();
top_queue = new Queue<string>();
bot_queue = new Queue<string>();
wrong_queue = new Queue<string>();
prev_wrong = false;
finalsaltwater.SetActive(false);
filtersand.SetActive(false);
platewater.SetActive(false);
}
public void StartDialogue(Question question, Question topprompt, Question botprompt, Question wrong)
{
sen_queue.Clear();
top_queue.Clear();
bot_queue.Clear();
wrong_queue.Clear();
foreach (string sentence in question.sentences)
{
sen_queue.Enqueue(sentence);
}
foreach (string sentence in topprompt.sentences)
{
top_queue.Enqueue(sentence);
}
foreach (string sentence in botprompt.sentences)
{
bot_queue.Enqueue(sentence);
}
foreach (string sentence in wrong.sentences)
{
wrong_queue.Enqueue(sentence);
}
DisplayNext();
}
IEnumerator ToggleFalse(GameObject thing)
{
yield return new WaitForSeconds(1.5f);
thing.SetActive(false);
}
IEnumerator ToggleTrue(GameObject thing)
{
yield return new WaitForSeconds(1.5f);
thing.SetActive(true);
}
public void DisplayNext()
{
Debug.Log("IN DISPLAY " + sen_queue.Count);
if (sen_queue.Count == 0)
{
EndDialogue();
return;
}
if (top_queue.Count == 2)
{
platewater.SetActive(true);
water.SetActive(false);
StartCoroutine(ToggleFalse(salt));
} else if (top_queue.Count == 1)
{
filtersand.SetActive(true);
sand.SetActive(false);
platewater.SetActive(false);
StartCoroutine(ToggleTrue(finalsaltwater));
} else if (top_queue.Count == 0)
{
platewater.SetActive(true);
StartCoroutine(ToggleTrue(salt));
StartCoroutine(ToggleFalse(platewater));
finalsaltwater.SetActive(false);
}
string sentence = sen_queue.Dequeue();
if (top_queue.Count != 0)
{
string topbutton = top_queue.Dequeue();
topText.text = topbutton;
}
if (bot_queue.Count != 0)
{
string botbutton = bot_queue.Dequeue();
botText.text = botbutton;
}
prev_wrong = false;
dialogueText.text = sentence;
}
public void IncorrectDisplay()
{
if (wrong_queue.Count == 0)
{
return;
}
if (prev_wrong == false)
{
string wrong_sen = wrong_queue.Dequeue();
dialogueText.text = wrong_sen;
}
prev_wrong = true;
}
public void EndDialogue()
{
dialogueText.text = "Good job! Refresh the page if you want to restart.";
return;
}
}