Double press script
Hi! I am having a tough time with making a pause function. I know that this is a basic thing, but i didn't found anything that could explain me how to do what i want, so i am forced to ask here...
Here is my script:
#pragma strict
function Update ()
{
if (Input.GetKey ("p"))
if (Time.timeScale == 1.0)
Time.timeScale = 0.0;
else
Time.timeScale = 0.0;
if (Input.GetKey ("p"))
if (Time.timeScale == 0.0)
Time.timeScale = 1.0;
else
Time.timeScale = 1.0;
}
If you press "P", the game will pause. The problem is that it doesn't work. Why? Because i can't make what i want. I need to make something like "double pressing". If the player has pressed "P" one time, pause the game. If he pressed two times, unpause. I used GetKey and GetKeydown, but it isn't the same thing and is glitchy. I think i need to use something like a trigger, but i don't know how. Can someone lend me a hand here?
Answer by Naphier · Oct 29, 2016 at 03:12 AM
Input.GetKey is continuously triggered while the button is pressed. Like autofire. Input.GeyKeyDown is only trigger when the key is first pressed down. Your statement can also be greatly simlpified:
if (Input.GetKeyDown("p"))
{
if (Time.timeScale == 1)
Time.timeScale = 0;
else
Time.timeScale = 1;
}
Caution when pausing things via timeScale! This will also pause any animations (if they aren't timescale independent) or events based on Time.deltaTime.
Sure, on thing to watch out for here is floating point error/imprecision. You'll be O$$anonymous$$ 99.9% of the time, but it might be better to say:
if ($$anonymous$$athf.Appoximately(Time.timeScale, 1))
ins$$anonymous$$d of
if (Time.timeScale == 1)
It might be paranoid, but floats can be bad to compare sometimes.
Answer by NicoVar · Oct 29, 2016 at 09:47 AM
Hi,
I'm not quite certain what you actually need.
Why would you need the player to press two times to unpause? Your game should react to the "p" key and check, if the game is paused, resume. If the game is playing, then pause.
If that works for you, then simply doing this would work:
if (Input.GetKey ("p"))
{
if (Time.timeScale == 0)
{
// Resume the game
Time.timeScale = 1;
}
else
{
// Pause the game
Time.timeScale = 0;
}
}
Your answer
Follow this Question
Related Questions
addComponent c# script by java 0 Answers
How to change numbers in unity 1 Answer
C# - JS problem. 1 Answer
Is it best practice to not attach a pause script (or others) to a GameObject? 1 Answer