Timer will not reset properly.

In the game I am making, there are “dummies” that the player shoots at. When the player shoots them they disappear. The game is a time trial to shoot all of the dummies as fast as possible.

Here is my problem:

I can’t get the timer to reset. I have gotten it to stop when all of them are shot, but when i press “R” to reset, the timer goes back to zero when I cross the trigger, but when i finish the map for the second time, the time just adds on with the previous attempt.

I have figured out through hours of research that Time.time is my problem. I cant reset Time.time to zero. I have tried many different things trying to get it to reset correctly and I have run out of ideas.

I am posting my code on this question as well as a YouTube video of me explaining my problem. Thanks in advance for your help :smiley:

YouTube Link:
Shooting Frenzy Help Video

Sorry for the bad audio… it didn’t record correctly…

using UnityEngine;
using System.Collections;

public class GameControllerTime : MonoBehaviour {

	private static int dummyAmount;
	private static float startTime, endTime;
	private static float elapsedTime;

	public string currentLevel;

	public GUIStyle timer;
	public Rect rect = new Rect(300, 25, 100, 200);

	// Use this for initialization
	void Start () {
		dummyAmount = GameObject.FindGameObjectsWithTag ("Dummy").Length;
		startTime = 0;


	public static void RemoveDummy(){
		/* I have another script attached to the dummies that triggers this function*/

		if (dummyAmount <= 0) {

			endTime = Time.time;
			elapsedTime = endTime - startTime;


	void Update () {

		if (startTime > 0)
			elapsedTime = Time.time - startTime;

		/* This reloads the level when "r" is pressed, it could go in another scrpit if needed.
		 			It resets the dummies but not the timer. */

		if (Input.GetKeyDown (KeyCode.R)) {

			Application.LoadLevel (currentLevel);


	void OnTriggerEnter(){

		/* walk through trigger to start timer */

		startTime = Time.time;


	void OnGUI(){

		/*puts timer on screen*/	

		if (dummyAmount >= 1) {
			GUI.Label (rect, (elapsedTime.ToString ("F2")), timer);
			rect.x = 20f;
			rect.y = 20f;
		else {
			GUI.Label (rect, (endTime.ToString ("F2")), timer);
			rect.x = 20f;
			rect.y = 20f;


Ahh, some of this code looks familiar :wink: Anyway…

The starting time needs to be set to the current time, so when you subtract the start time from the end time you are getting a meaningful number. Just change line 19 to

startTime = Time.time;

and your problem is solved.