Шкала времени по-прежнему 0, но она должна быть снова 1 - PullRequest
0 голосов
/ 09 апреля 2020

я делаю Android игру с Unity. Когда вы нажимаете на объект, вы d ie, и игрок продолжает двигаться вперед, поэтому я решил остановить время. Также я установил время на 0. Затем, когда id ie и нажал кнопку перезапуска, время все равно 0. Даже если я пишу в Restart () - метод, Time.timeScale = 1f, ничего не меняется. Метод перезапуска просто создайте тот же уровень снова.

Может кто-нибудь помочь мне, пожалуйста!

Вот когда игрок сталкивается с объектом с тегом "препятствие":

private void OnCollisionEnter(Collision collision)
    {

        if (collision.collider.tag == "Obstacle")
        {

            Time.timeScale = 0f;

            FindObjectOfType<GameManager>().DeathCanvas();

        }

Затем всплывает «Холст смерти», и вы можете нажать «Перезагрузить». Это метод перезапуска в Gamemanager:

public void Restart ()
    {
        Time.timeScale = 1f;
        SceneManager.LoadScene(SceneManager.GetActiveScene().name);
    }

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Используйте что-то вроде

Time.timeScale = 0.000001f;

Не устанавливайте его на ноль, это может помочь.

0 голосов
/ 09 апреля 2020

ОК, спасибо за дополнительную информацию, я не знаю, как настроена сцена, но, судя по всему, столкновение может быть инициировано сразу после сброса временной шкалы, перемещая его обратно в 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();

        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...