- Home /
How do I implement a timer into this script that will record the total time the player has played.
Is there a way that I can implement a timer that records the total time a player has played the main game? Also could some one fix the code? I don't know how to. Thanks.
var vSbarValue : float;
function OnGUI (){
vSbarValue = GUI.VerticalScrollbar(Rect (887.5, 150, 100, 300), vSbarValue, 1.0, 10.0, 0.0);
//Font Size and Color Change
var statsStyle = new GUIStyle("label");
statsStyle.fontSize = 30;
var buttonStyle = new GUIStyle("Button");
buttonStyle.fontSize = 17.5;
var statStyle = new GUIStyle("Label");
statStyle.fontSize = 17.5;
var twoStyle = new GUIStyle("Label");
twoStyle.fontSize = 25;
var fourStyle = new GUIStyle("Label");
fourStyle.fontSize = 25;
var pictureStyle = new GUIStyle("Label");
pictureStyle.fontSize = 20;
//Statistics Title GUI Design
GUI.contentColor = Color.black;
GUI.backgroundColor = Color.white;
GUI.Label(Rect(450,100,250,100), "Statistics",statsStyle);
GUI.Label(Rect(470,135,250,100), "Pictures",pictureStyle);
//Statistics Sub-Title GUI Design
GUI.Label(Rect(200,175,250,100), "High Scores for Two Choices:",statStyle);
GUI.Label(Rect(600,175,250,100), "High Scores for Four Choices:",statStyle);
//Two Choices GUI Design
GUI.Label(Rect(175,200,250,100), "A - Z = ",twoStyle);
GUI.Label(Rect(175,275,250,100), "Z - A = ",twoStyle);
GUI.Label(Rect(175,350,250,100), "Random = ",twoStyle);
//Four Choices GUI Design
GUI.Label(Rect(575,200,250,100), "A - Z = ",fourStyle);
GUI.Label(Rect(575,275,250,100), "Z - A = ",fourStyle);
GUI.Label(Rect(575,350,250,100), "Random = ",fourStyle);
if(GUI.Button(Rect(150,100,150,30), "Back to Menu",buttonStyle)){
Application.LoadLevel("Menu");
}
if(GUI.Button(Rect(750,100,150,30), "Next Page",buttonStyle)) {
Application.LoadLevel("Statistics2");
}
}
Answer by Em3rgency · Jul 05, 2013 at 02:34 PM
float gameTime = 0;
void Update()
{
gameTime += Time.deltaTime;
Debug.Log("You have been playing for " + (int)gameTime + " seconds");
}
(int)gameTime will get you the elapsed time in seconds. Just gameTime will get you an exact float value. You can print the gameTime in your onGUI script and remove the Debug.Log message I made for the example.
Where would I put this in the code? Sorry I'm really new to this stuff.
The float gameTime = 0 declaration would go right after your class declaration, where all the class variables are.
the void update() function and everything inside it can go anywhere, as long as its inside the class and not inside any other function.
And then, ins$$anonymous$$d of my Debug.Log, you use the gameTime variable where you need it to be shown. Like if you want to make a window with a clock, you use it inside the onGUI function.
I'm getting an error on "float gameTime = 0;" saying "";" expected. Insert a semicolon at the end." and also at "gameTime += Time.deltaTime;" is getting an error saying "Expecting :, found +=". Am I doing something wrong?
Yes, it seems you're missing the semicolon at declaration. Better yet, just post your whole code. Inside a code sample, of course.
var vSbarValue : float;
function OnGUI (){
vSbarValue = GUI.VerticalScrollbar(Rect (887.5, 150, 100, 300), vSbarValue, 1.0, 10.0, 0.0);
//Font Size and Color Change
var statsStyle = new GUIStyle("label");
statsStyle.fontSize = 30;
var buttonStyle = new GUIStyle("Button");
buttonStyle.fontSize = 17.5;
var statStyle = new GUIStyle("Label");
statStyle.fontSize = 17.5;
var twoStyle = new GUIStyle("Label");
twoStyle.fontSize = 25;
var fourStyle = new GUIStyle("Label");
fourStyle.fontSize = 25;
var pictureStyle = new GUIStyle("Label");
pictureStyle.fontSize = 20;
float gameTime = 0;
//Statistics Title GUI Design
GUI.contentColor = Color.black;
GUI.backgroundColor = Color.white;
GUI.Label(Rect(450,100,250,100), "Statistics",statsStyle);
GUI.Label(Rect(470,135,250,100), "Pictures",pictureStyle);
//Statistics Sub-Title GUI Design
GUI.Label(Rect(200,175,250,100), "High Scores for Two Choices:",statStyle);
GUI.Label(Rect(600,175,250,100), "High Scores for Four Choices:",statStyle);
//Two Choices GUI Design
GUI.Label(Rect(175,200,250,100), "A - Z = ",twoStyle);
GUI.Label(Rect(175,275,250,100), "Z - A = ",twoStyle);
GUI.Label(Rect(175,350,250,100), "Random = ",twoStyle);
//Four Choices GUI Design
GUI.Label(Rect(575,200,250,100), "A - Z = ",fourStyle);
GUI.Label(Rect(575,275,250,100), "Z - A = ",fourStyle);
GUI.Label(Rect(575,350,250,100), "Random = ",fourStyle);
if(GUI.Button(Rect(150,100,150,30), "Back to $$anonymous$$enu",buttonStyle)){
Application.LoadLevel("$$anonymous$$enu");
}
if(GUI.Button(Rect(750,100,150,30), "Next Page",buttonStyle)) {
Application.LoadLevel("Statistics2");
}
}
{
gameTime += Time.deltaTime;
}
Answer by iwaldrop · Jul 05, 2013 at 06:18 PM
The simplest method would be to simply record the start time and compare it to the current time.
private float startTime;
void HandleOnGameStarted()
{
startTime = Time.time;
}
public float TotalGameTime
{
get { return Time.time - startTime; }
}
In this way you're not incrementing a counter every frame, and you can get the result any time you want.