Как заставить таймер продолжать работу после сброса себя в Unity C# - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь получить таймер для продолжения ПОСЛЕ того, как игра перезагружается, и у меня все еще остается то же время, прямо сейчас, каждый раз, когда мой персонаж сбрасывает, он сбрасывает таймер. Я делаю это в C# в игре 3D Unity. Я просмотрел множество видео и множество веб-сайтов, и, похоже, никто не нашел ответа. это мой код:


 void Dying()
    {
        Invoke("LoadFirstLevel", Delay);
    }

    void OnCollisionEnter(Collision collision)
    {

        switch (collision.gameObject.tag)
        {
            case "Obstacle":
                LoadFirstLevel();
                break;
        }
    }


    private void LoadFirstLevel()
    {
        SceneManager.LoadScene(0);
    } 

это мой код таймера:

{
    float currentTime = 0f;
    float startingTime = 60f;
    AudioSource audioSource;

    [SerializeField] Text CountdownText;
    void Start()`enter code here`
    {
        currentTime = startingTime;

    }

    void Update()
    {
        currentTime -= 1 * Time.deltaTime;
        CountdownText.text = currentTime.ToString("0");

        if (currentTime <= 0)
        {
            currentTime = 0;

        }

    }

}

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Вы можете использовать поле static, чтобы оно было «общим» для всех экземпляров этого класса - для всей сессии!

Вы можете объединить его со вторым флагом static bool для указания того, было ли инициализировано поле раньше, поэтому не сбрасывается на 60 позже, но только в первый раз:

private static float currentTime = 0f;
// This could even be a constant
private const float startingTime = 60f;
private static bool isInitialized;

AudioSource audioSource;

[SerializeField] Text CountdownText;
void Start()
{
    // Use the flag so this is only done once for this session
    if(!isInitialized)
    {
        currentTime = startingTime;
        isInitialized = true;
    }
}

void Update()
{
    currentTime -= * Time.deltaTime;
    CountdownText.text = currentTime.ToString("0");

    if (currentTime <= 0)
    {
        currentTime = 0;
    }
}

Теперь каждый экземпляр вашего таймера уменьшается в одно и то же поле currentTime.

0 голосов
/ 11 марта 2020

Добавьте DontDestroyOnLoad к вашему объекту таймера. Он предотвращает разрушение вашего объекта при смене сцены.

void Awake() {
    DontDestroyOnLoad(this.gameObject);
}

или вы можете использовать переменные stati c для подсчета времени. Также остается значение.

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