- Home /
Resetting a timer after game over
Working on a timer for my game, but having trouble getting the game to reset once the time runs out. I've tried looking through several other pages of people having this problem, but I can't seem to get it to work ><
The code I'm using:
using UnityEngine;
using System.Collections;
public class TimerScript : MonoBehaviour {
private float startTime = 0;
private float restSeconds = 0;
private int roundedRestSeconds = 0;
private float displaySeconds = 0;
private float displayMinutes = 0;
public int CountDownSeconds = 120;
private float Timeleft = 0;
string timetext = "";
void Start () {
startTime = Time.deltaTime;
}
void ResetTimer()
{
startTime = Time.time;
}
void OnGUI ()
{
startTime = 0;
Timeleft = Time.time-startTime;
restSeconds = CountDownSeconds-(Timeleft);
roundedRestSeconds = Mathf.CeilToInt(restSeconds);
displaySeconds = roundedRestSeconds % 60;
displayMinutes = (roundedRestSeconds / 60)%60;
timetext = (displayMinutes.ToString() + ":");
if (displaySeconds > 9){
timetext = timetext + displaySeconds.ToString();
}
else {
timetext = timetext + "0" + displaySeconds.ToString();
}
if (displaySeconds < 0){
ResetTimer();
Application.LoadLevel("over");
}
GUI.Box(new Rect(650.0f, 0.0f, 100.0f, 75.0f), timetext);
}
}
Any help would be greatly appreciated.
Answer by CodeMasterMike · Nov 07, 2012 at 07:03 AM
First of,
startTime = Time.deltaTime;
Doesn't make much sense. It would be better if you set it to 0, or to Time.Time, as you do in the ResetTimer()-function.
And in the OnGUI()-function, you should remove the startTime = 0;
since the start time should only be changed at startup and/or at reset. You might also want to move the time calculation to the Update() function, since you dont need to calculate the time several times per frame. Once per frame is enough.
If you want some example code, you can look at my implementation of a time counter:
m_currentTime = ((((m_countdownTime + m_startTime) - Time.time) * Time.timeScale));
m_currentHour = ((((Mathf.FloorToInt(m_currentTime))/60)/60)%24);
m_currentMinute = (((Mathf.FloorToInt(m_currentTime))/60)%60);
m_currentSecond = ((Mathf.FloorToInt(m_currentTime))%60);
m_currentMillisecond = (Mathf.RoundToInt(((m_currentTime * 1000) - (Mathf.FloorToInt(m_currentTime) * 1000))));
m_countdownTime is the value of seconds you want to count from (ex. 20 seconds). The m_startTime I set at the Start()-function as such:
m_startTime = Time.time;
Your answer
Follow this Question
Related Questions
How To Reset Timer on a Collision (C#) 0 Answers
Timer variable set to zero 2 Answers
How to reset timer? (C#) 3 Answers
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers