Я попробовал Invoke с разными значениями времени и timeScale.
Время в Invoke ускоряется и замедляется в соответствии с timeScale.
При timeScale = 0 время для Invoke не идет.
Мне удалось сделать отсчет реального времени независимо от timeScale при помощи сопрограммы (корутины).
// При нажатии кнопки запускается этот метод.
// Он на две секунды стопает игру и показывает фигуру,
// а потом прячет ее и возобновляет игру
public void ToggleShapeWithCoroutineReal()
{
Time.timeScale = 0f;
shape.SetActive(true);
StartCoroutine(HideShapeLaterReal(2f));
}
private IEnumerator HideShapeLaterReal(float time)
{
yield return new WaitForSecondsRealtime(time);
Time.timeScale = 1f;
shape.SetActive(false);
}
Вот пример кода, но игра просто не отжимает паузу после того как пройдет 2 секунды:
if (Input.GetMouseButton(0))
{
Time.timeScale = 0;
text1.SetActive(true);
Invoke("TextWait1", 2f);
}
void TextWait1()
{
Time.timeScale = 1f;
text1.SetActive(false);
Destroy(text1);
}