ОК, спасибо за дополнительную информацию, я не знаю, как настроена сцена, но, судя по всему, столкновение может быть инициировано сразу после сброса временной шкалы, перемещая его обратно в 0. Это как правило, это не очень хорошая практика.
Я бы посоветовал вам не останавливать игру, используя timeScale. Гораздо лучший способ остановить игрока, не тратя время, - использовать bool на объекте игрока для «isRunning» и запускаться только тогда, когда для этого bool установлено значение true. Затем, когда вы d ie, просто установите для него значение false, а после перезапуска установите для него значение true.
Таким образом вы избежите некоторых ошибок, которые могут быть вызваны нулевой шкалой времени.
Если вы просто хотите, чтобы ваше текущее решение работало,
1) Выполните поиск Time.timeScale по всему проекту, чтобы убедиться, что он не изменяется в других местах
2) Не устанавливайте timeScale равным 0 более одного раза. Объявите приватного bool с именем hasDied и установите его в true, как только игрок умрет. Затем проверьте это перед установкой шкалы времени снова. Bool будет сброшен при перезагрузке сцены. Пример:
private bool hasDied = false;
private void OnCollisionEnter(Collision collision)
{
if (!hasDied && collision.collider.tag == "Obstacle")
{
hasDied = true;
Time.timeScale = 0f;
FindObjectOfType<GameManager>().DeathCanvas();
}
}