Unity: Остановка времени

Если воспользоваться глобальной остановкой времени так:

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;
}

08.04.17
Есть немного другая функция, но которая для работы использует реальное время, не зависящее от настроек TimeScale. С ней код будет лучше:

IEnumerator TimeStop()
{
  Time.timeScale = 0f;
  yield return new WaitForSecondsRealtime(timeWait);
  Time.timeScale = 1f;
}