在倒数计时器熄灭时停止游戏

时间:2014-05-31 02:55:11

标签: c# timer unity3d

我已经通过点击退出按钮让游戏暂停和取消暂停。现在我想当游戏暂停并且用户再次点击退出按钮时,倒计时器正在滴答,当倒计时器显示时间达到0时,游戏将被取消暂停。问题是当游戏暂停时用户再次点击退出按钮时,倒数计时器没有滴答作响,游戏立即取消暂停。

以下是目前的代码:

using UnityEngine;
using System.Collections;

// Pause Logic
public class Pause : MonoBehaviour 
{
    public static bool paused = false; // For checking whether the game is paused or not

    float seconds = 5;
    float minutes = 0;

    void Update()
    {
        // If user hit escape button
        if (Input.GetKeyDown("escape"))
        {
            // Set the paused to togglePause method
            paused = TogglePause();
        }

    }

    void OnGUI()
    {
        // If paused is true
        if (paused)
        {
            // Show the Paused GUI Box
            GUI.Box(new Rect(Screen.width / 3 - 5, Screen.height - 30, 450, 25), "Paused, Press Escape button again to unpause");
        }

    }

    bool TogglePause()
    {
        // If the time scale is 0 or pause
        if (Time.timeScale == 0.0f)
        {
            // Set time scale to 1
            Time.timeScale = 1f;

            // and set to the false
            return (false);
        }

        // If the time scale is 1 or unpause
        else
        {
            if (seconds <= 0)
            {
                // Set time scale to 0
                Time.timeScale = 0.0f;

                if (minutes >= 1)
                {
                    minutes--;
                }

                else
                {
                    minutes = 0;
                    seconds = 0;
                    GameObject.Find("Pause").guiText.text = minutes.ToString("f0") + ":0" + seconds.ToString("f0");
                }
            }

            else
            {
                seconds -= Time.deltaTime;
            }

            if (Mathf.Round(seconds) <= 9)
            {
                GameObject.Find("Pause").guiText.text = minutes.ToString("f0") + ":0" + seconds.ToString("f0");
            }

            else
            {
                GameObject.Find("Pause").guiText.text = minutes.ToString("f0") + ":" + seconds.ToString("f0");
            }

            return (true);
        }
    }
}

非常感谢您的回答。

1 个答案:

答案 0 :(得分:1)

问题是您将时间刻度设置为零。因此,在跟踪时间之后,您需要具有创造性。使用以下时间计算持续时间:Time.realtimeSinceStartup

private IEnumerator Pause(int p)
{
    Time.timeScale = 0.1f;        

    float pauseEndTime = Time.realtimeSinceStartup + 1;

    while (Time.realtimeSinceStartup < pauseEndTime)
        yield return 0;

    Time.timeScale = 1;
}