2016-07-26 8 views
0

私は基本的に私のゲームでカウントダウンタイマーを持っています。私が基本的にやってみたいのは、アプリケーションを終了してもう一度再生しても、タイマーの再生を続けることです。タイマーのカウントダウンを続行します。アプリが閉鎖されているときにカウンタがまだ動作しているときのような一族のようなもの。たとえば、ゲームを終了し、タイマーが1:30(1分、30秒)に設定されているとします。 30秒後にゲームを再開すると、タイマーは1:00(1分、0秒)に表示されます.30秒後にゲームを終了すると、タイマーは1:00(1分、0秒)になります。Unity2D:アプリケーション終了後もタイマーを再開する方法

これまでのところ、これは限り私が持っているようです:

パブリッククラス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()); 
} 

}

答えて

2

TimeOnExitは良いのですが、あなたはまた、ターゲットのいずれかを格納する必要があります時間または残りの各カウントダウンタイマーの時間(複数の場合、例えば複数のWoodcuttersがWoodを生産している場合)。

次に、ゲームのスタートアップコードで、ユーザーが不在だったことを毎秒1回ゲームループを実行する必要があります。タイマーによってイベントがトリガーされた場合、このループでそのイベントをトリガーします(ウッドカッターは1ウッドをバーンに追加します)。

起動時にプログレスバーが表示されたことがある場合は、何が起きているのかが分かります。

ゲームやユーザーの経過時間によっては、同じタイマーの繰り返しをシミュレートする必要があるかもしれません。Woodcutterは1枚のWoodをBarnに追加し、次のWoodで作業を開始します。追いついた)。

最後に、存在し、ライブ演奏中に続行する必要がある実際のタイマーを再インスタンス化する必要があります。彼らが5分のループ内のどこにいるかを確かめてください。すべてのタイマーが数秒遅れると、誰も気づくことはありませんが、再起動によってすべての行が表示された場合、それは不思議に見えます。

洗練されたものになると、1秒以上(またはあなたのゲームにとって意味のある時間)のシミュレーションよりも時間のかかるシミュレーションが始まります。

ヒント:目標時間の配列とトリガーするイベントを格納すると、過去のものを順番に調べて順番にトリガーするのは簡単です。反復イベントのために、新しいターゲット時間をアレイに必ず挿入してください。

Good Luck!

関連する問題