单元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());
}
}
TimeOnExit很好,但您还需要存储每个倒计时计时器的目标时间或剩余的时间(如果您有多个,例如多个Woodcutter生产木材)。
然后,在游戏的启动代码中,您需要在用户缺席的情况下每秒运行一次游戏循环。如果计时器触发了一个事件,则在该循环中触发该事件(Woodcutter将1个Wood添加到Barn)。
如果你曾经在创业时看到过一款带有进度条的游戏,那么这很有可能是正在发生的事情的一部分
根据你的游戏和用户离开的时间,你可能需要模拟同一计时器的多次迭代(Woodcutter将1个Wood添加到Barn,然后开始处理下一个Wood——一遍又一遍,直到时间赶上为止)。
最后,您需要重新实例化实际存在的计时器,并且需要在现场播放期间继续。一定要弄清楚它们在5分钟循环内的位置。如果所有计时器都关闭了几秒钟,没有人会注意到,但如果重新启动意味着它们都排好了队,那就显得很奇怪了。
一旦你变得老练,有些技术会比一秒比一秒(或者任何对你的游戏有意义的时间段)模拟过去的时间更快,但这是一个很好的开始。
这里有一个提示:若您存储了一个目标时间和应该触发的事件的数组,则可以很容易地循环过去的时间并按顺序触发它们。请确保在数组中插入新的目标时间以重复事件。
祝你好运!