Хорошо!весь мой код в этой сцене в одном сценарии и одном объекте менеджера.всего это около 700 строк.поэтому я не могу поставить это здесь.Я тестировал разные вещи:
- 1) переключение платформы с android на pc / mac
- 2) тест на предыдущей версии Unity (предыдущий 2017, и текущий на 2018.1)
Ни один из них не решает проблему.затем я изменяю некоторую часть кода, который, как я подозревал, может вызвать проблему.(ни один из них не решает проблему).затем я начал помещать Debug.Log () s везде.поэтому я нашел, где он зависает.
Вот код:
IEnumerator ShowSigns(int Button1State, int EqualState, int Button2State)
{
Debug.Log("ShowSigns");
if (Button1State == 1)
{
OperationOneCorrectSign.GetComponent<CanvasGroup>().alpha = 1;
}
else if (Button1State == 2)
{
OperationOneIncorrectSign.GetComponent<CanvasGroup>().alpha = 1;
}
if (EqualState == 1)
{
EqualCorrectSign.GetComponent<CanvasGroup>().alpha = 1;
}
else if (EqualState == 2)
{
EqualIncorrectSign.GetComponent<CanvasGroup>().alpha = 1;
}
if (Button2State == 1)
{
OperationTwoCorrectSign.GetComponent<CanvasGroup>().alpha = 1;
}
else if (Button2State == 2)
{
OperationTwoIncorrectSign.GetComponent<CanvasGroup>().alpha = 1;
}
Debug.Log("BeforeWaiting");
yield return new WaitForSeconds(0.3f);
Debug.Log("AfterWaiting");
OperationOneCorrectSign.GetComponent<CanvasGroup>().alpha = 0;
OperationOneIncorrectSign.GetComponent<CanvasGroup>().alpha = 0;
EqualCorrectSign.GetComponent<CanvasGroup>().alpha = 0;
EqualIncorrectSign.GetComponent<CanvasGroup>().alpha = 0;
OperationTwoCorrectSign.GetComponent<CanvasGroup>().alpha = 0;
OperationTwoIncorrectSign.GetComponent<CanvasGroup>().alpha = 0;
state = GameState.CreateNewProblem;
Debug.Log("EndSigns");
}
Я обнаружил, что он зависает на этом:
yield return new WaitForSeconds(0.3f);
Очень странно !!!
Это изображение игры.
Игра представляет собой простую игру, в которой показано 2 математических фразы, и игрок должен выбрать большее или равное.Логика такова:
- 1) сделать новые фразы и изменить состояние игры на «ChooseAnswer»
- 2) игроку нажать одну из 3 кнопок и ответ проверен и набрать идругие вещи меняются, и сопрограмма ShowSigns запускается и заканчивается через 0,3 секунды.и, как вы видите в конце состояния сопрограммы, изменяется на «CreateNewProblem».
- 3) в обновлении при обнаружении CreateNewProblem, вызов кода для функции NewProblem () для создания новых фраз и в концеэто состояние игры меняется на «ChooseAnswer».
эта логика повторяется снова и снова, пока время не достигнет нуля.переменная «шаг» увеличивается и уменьшается на 1 при любом правильном и неправильном ответе.а переменная level = steps / 10 определяет сложность фраз.
игра работает правильно на% 98 нажимает кнопки On.но обычно он останавливается где-то после шага 20. В 21, 23, 27, 34 ... очень случайно.но всегда после 20 и некоторое время не замерзает, пока не закончится время.и всегда прямо перед возвратом урожая.точно на одной линии.
Я прочитал много вопросов и ответов, но ни один из них не помог.У меня нет цикла while, no while (true), пока я знаю и проверяю свой код, нет бесконечного цикла, на StopAllCoroutines ... ничего.и я застрял на 2 дня.спасибо всем вам за помощь.
ОН, и вот файл кода