Unity2D:即使应用程序退出后如何恢复计时器

时间:2016-07-26 19:17:38

标签: c#

基本上我在游戏中有一个倒数计时器。我基本上想要做的是继续我的计时器播放,即使我关闭我的应用程序并再次播放,我希望计时器继续倒计时。当应用程序关闭时,当计数器仍然有效时,有点像战队的冲突。例如:如果我退出游戏并且计时器在1:30(1分30秒)。然后,如果我在30秒后重新开始游戏,计时器应显示1:00(1分0秒)或者如果我在30秒后关闭游戏,计时器应显示1:00(1分0秒)

到目前为止,这是我所拥有的:

公共类TimeManager:MonoBehaviour {

public Text timer;
float minutes = 5;
float seconds = 0;
float miliseconds = 0;
public int curHealth;
public int maxHealth = 3;

void Start ()
{
    curHealth = maxHealth;
}

void Awake ()
{

    if (PlayerPrefs.HasKey("TimeOnExit"))
    { 
        var x = DateTime.Now - DateTime.Parse(PlayerPrefs.GetString("TimeOnExit"));
        PlayerPrefs.DeleteKey("TimeOnExit");
    }

}
void Update(){
    if(miliseconds <= 0){
        if(seconds <= 0){
            minutes--;
            seconds = 59;
        }
        else if(seconds >= 0){
            seconds--;
        }

        miliseconds = 100;
    }

    miliseconds -= Time.deltaTime * 100;

    //Debug.Log(string.Format("{0}:{1}:{2}", minutes, seconds, (int)miliseconds));
    timer.text = string.Format("{0}:{1}", minutes, seconds, (int)miliseconds);
}
private void OnApplicationQuit()
{
    PlayerPrefs.SetString("TimeOnExit", DateTime.Now.ToShortTimeString());
}

}

1 个答案:

答案 0 :(得分:2)

TimeOnExit很好,但您还需要存储每个倒数计时器的目标时间或剩余时间(如果您有多个 - 例如,多个Woodcutters生产木材。)

然后,在游戏的启动代码中,您需要每秒运行一次用户不在的游戏循环。如果计时器触发了一个事件,你就会在这个循环中触发该事件(Woodcutter将1 Wood添加到Barn)。

如果你曾经在创业时看过一个带有进度条的游戏,那么很有可能是这个游戏的一部分。

根据您的游戏以及用户离开的时间长短,您可能需要模拟同一计时器的多次迭代(Woodcutter将1 Wood添加到Barn,然后开始处理下一个Wood - 一遍又一遍,直到时间被捕获向上)。

最后,您需要重新实例化现有的实际计时器,并且需要在实时播放期间继续。一定要弄清楚它们在5分钟循环中的位置。如果所有定时器都关闭了几秒钟,没有人会注意到,但如果重新启动意味着它们都排成一行,那就显得很奇怪了。

一旦你变得复杂,有一些技术比一秒钟(或对你的游戏有意义的任何时间段)更快的模拟过去的时间,但这是一个很好的起点。

这里有一个提示:如果存储目标时间的数组以及应触发的事件,可以很容易地循环过去的那些并按顺序触发它们。确保将新的目标时间插入数组以重复事件。

祝你好运!

相关问题