Если воспользоваться глобальной остановкой времени так:
Time.timeScale = 0f;
То в этом случае время будет остановлено, но возобновить его уже не получится, т.к. с этого момента WaitForSeconds также остановится, поскольку она «живет» по игровому времени, а значит нельзя будет установить нормальную скорость течения игрового времени:
Time.timeScale = 1f;
Чтобы это обойти пришлось создать иллюзию остановленного времени. Т.е. скорость течения будет настолько мала, что это не будет заметно, однако можно будет делать проверку, чтобы возобновить его:
private float timeWait = 5f; // остановка времени на 5 секунд
// Вызов остановки времени из любого места скрипта
StartCoroutine("Timestop");
IEnumerator Timestop ()
{
Time.timeScale = 0.001f;
yield return new WaitForSeconds(timeWait*Time.timeScale);
Time.timeScale = 1;
}
Однако это будет не совсем корректно, поэтому лучшим вариантом будет использование метода WaitForSecondsRealtime.
В принципе это похожая функция, но для её работы Unity использует реальное время, не зависящее от настроек TimeScale. С ней код будет лучше:
IEnumerator TimeStop()
{
Time.timeScale = 0f;
yield return new WaitForSecondsRealtime(timeWait);
Time.timeScale = 1f;
}
- Не приходит СМС для авторизации на сайте Госуслуги - 01.11.2024
- VSCode: Найти и удалить элементы xml - 29.10.2024
- WordPress: Ошибка в плагине WpDiscuz - 08.10.2024