- Home /
How to integrate timer into my C# script?
Hello Unity Answers,
I'm looking for some help on how to create a timer within my script which appears on screen when the player collides into a cube.
At the moment when the player collides into the cube a question appears on screen. I would like to display a timer counting down from 10 to 0, with 0 destroying the pop up box and the player going back to the start.
Any ideas/help/suggestions would be much appreciated.
using System;
using System.Collections.Generic;
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Question1 : MonoBehaviour {
private Rect windowRect = new Rect (500, 100, 400, 200); //Window size
public bool question1;
private int count;
public Text countText;
void start()
{
count = 0;
SetCountText ();
}
void OnGUI()
{
windowRect = GUI.Window (0, windowRect, WindowFunction, "Ebola Quiz Island"); //window on screen
}
void WindowFunction (int windowID)
{
// Draw any Controls inside the window here
GUI.Label (new Rect (30, 25, 200, 50), " What year did Ebola begin?"); // Question
if (GUI.Button (new Rect (20, 100, 100, 30), "1976")) // Correct Answer
{
Destroy (this.gameObject);
count = count + 1;
SetCountText ();
}
if (GUI.Button (new Rect (280, 100, 100, 30), "1986")) //Wrong answer
{
Destroy (this.gameObject);
Application.LoadLevel(Application.loadedLevel);
}
if (GUI.Button (new Rect (20, 150, 100, 30), "1996")) // wrong answer
{
Destroy (this.gameObject);
Application.LoadLevel(Application.loadedLevel);
}
if (GUI.Button (new Rect (280, 150, 100, 30), "1966")) // wrong answer
{
Destroy (this.gameObject);
Application.LoadLevel(Application.loadedLevel);
}
}
void SetCountText()
{
countText.text = "Score: " + count.ToString ();
}
}
Player collides with cube and question box appears below :)
I would like a timer to appear when this question box is on screen and counts down from 10 to 0, with 0 destroying the questionbox and making the player restart the game. :)
Set the timer's value to 10f (float). Either use an update() method and check whether a bool is true, which you set to true oncollisionenter() or use an IEnumerator and a while loop within (while (timer > 0)). In this loop, timer -= * Time.deltaTime. Outside of the loop, set another bool to false ("renderBox"). This bool deter$$anonymous$$es whether the GUI element will be rendered in the OnGUI() function.
void OnGUI() {
if (renderBox) {
windowRect = GUI.Window (0, windowRect, WindowFunction, "Ebola Quiz Island");
}
}
Answer by Neamtzu · Apr 09, 2015 at 07:25 PM
You can use something like this:
using UnityEngine;
using System.Collections;
public class timer : MonoBehaviour {
private bool showTimer = false; //make it true when you want to display the timer
private float time = 10f;
private string timerText;
void Update() {
if(showTimer) {
time -= Time.deltaTime;
if(time < 0) {
time = 0;
showTimer = false;
}
var seconds = time % 60;//Use the euclidean division for the seconds.
var fraction = (time * 100) % 100;
//update the label value
timerText = string.Format ("{0:00} : {1:000}", seconds, fraction);
}
}
}
You can get everything that is in Update and add it in your script. When you need to display the timer, make the showTimer variable true. In OnGUI, if showTimer is true, make a label to display the value stored in timerText. It should display the time like this: 09:123 In update, under if(time < 0) you can distroy the object.
Answer by RKM_91 · Apr 10, 2015 at 11:58 AM
Thank you both for your help managed to get it working. :)
Your answer
Follow this Question
Related Questions
C# simple timer? 2 Answers
Multiple Cars not working 1 Answer
the countdown timer inside a spawn() and inside while loop not working 1 Answer
Distribute terrain in zones 3 Answers
Timescale not affect timer? (C#) 2 Answers