单元2D:如何在应用程序退出后恢复计时器

本文关键字:退出 恢复 计时器 应用程序 2D 单元 | 更新日期: 2023-09-27 17:58:38

基本上我的游戏中有一个倒计时计时器。我基本上想做的是继续播放计时器,即使我关闭了应用程序并再次播放,我也希望计时器继续倒计时。有点像应用程序关闭时计数器仍在工作时的部落冲突。例如:如果我退出游戏,计时器为1:30(1分30秒)。然后,如果我在30秒后重新启动游戏,计时器应该显示1:00(1分0秒

到目前为止,这是我所掌握的:

公共类TimeManager:MonoBehavior{

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());
}

}

单元2D:如何在应用程序退出后恢复计时器

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

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

如果你曾经在创业时看到过一款带有进度条的游戏,那么这很有可能是正在发生的事情的一部分

根据你的游戏和用户离开的时间,你可能需要模拟同一计时器的多次迭代(Woodcutter将1个Wood添加到Barn,然后开始处理下一个Wood——一遍又一遍,直到时间赶上为止)。

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

一旦你变得老练,有些技术会比一秒比一秒(或者任何对你的游戏有意义的时间段)模拟过去的时间更快,但这是一个很好的开始。

这里有一个提示:若您存储了一个目标时间和应该触发的事件的数组,则可以很容易地循环过去的时间并按顺序触发它们。请确保在数组中插入新的目标时间以重复事件。

祝你好运!