基本上我在游戏中有一个倒数计时器。我基本上想要做的是继续我的计时器播放,即使我关闭我的应用程序并再次播放,我希望计时器继续倒计时。当应用程序关闭时,当计数器仍然有效时,有点像战队的冲突。例如:如果我退出游戏并且计时器在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());
}
}
答案 0 :(得分:2)
TimeOnExit很好,但您还需要存储每个倒数计时器的目标时间或剩余时间(如果您有多个 - 例如,多个Woodcutters生产木材。)
然后,在游戏的启动代码中,您需要每秒运行一次用户不在的游戏循环。如果计时器触发了一个事件,你就会在这个循环中触发该事件(Woodcutter将1 Wood添加到Barn)。
如果你曾经在创业时看过一个带有进度条的游戏,那么很有可能是这个游戏的一部分。
根据您的游戏以及用户离开的时间长短,您可能需要模拟同一计时器的多次迭代(Woodcutter将1 Wood添加到Barn,然后开始处理下一个Wood - 一遍又一遍,直到时间被捕获向上)。
最后,您需要重新实例化现有的实际计时器,并且需要在实时播放期间继续。一定要弄清楚它们在5分钟循环中的位置。如果所有定时器都关闭了几秒钟,没有人会注意到,但如果重新启动意味着它们都排成一行,那就显得很奇怪了。
一旦你变得复杂,有一些技术比一秒钟(或对你的游戏有意义的任何时间段)更快的模拟过去的时间,但这是一个很好的起点。
这里有一个提示:如果存储目标时间的数组以及应触发的事件,可以很容易地循环过去的那些并按顺序触发它们。确保将新的目标时间插入数组以重复事件。
祝你好运!