- Home /
c# update loop. How to?
Sorry if this question was answered before, but I wasnt able to find a solution. This is my code:
void Update(){
if(Input.GetMouseButtonDown(0)){
Debug.Log("Click");
}
}
I assumed, that the result would be an increasing number of Debug Logs while I hold the mouse button down. But it only writes one Debug Log per click. How can one create a loop like I thought it would be? And how could I decrease the frequency of that loop. I read, that there is no easy way for letting a c# script wait. Is that true?
Thank you.
Answer by robertbu · Dec 03, 2013 at 08:27 PM
Input.GetMouseButtonDown() return true only for the frame in which the mouse button is clicked. Input.GetMouseButton() will return true as long as the button is held down. You will get one Debug.Log() statement for each frame. The easiest way to moderate the number of checks is to put the check in a separate function and use InvokeRepeating() to make the checks.
It can be done using coroutines. Coroutines are a bit more complicated in C#, but neither C# nor Javascript allows you to put a 'yield' inside Update().
Some info on Coroutines:
http://docs.unity3d.com/Documentation/Manual/Coroutines.html
And Unity Gems has a more in-depth treatment of Coroutines.
Just seen your answer, it was accepted before $$anonymous$$e, so ignore my answer as it is pretty much the same.
Answer by jacksmash2012 · Dec 03, 2013 at 08:25 PM
This will explain why you are only getting output when you press the button:
Update occurs once each frame, so you cannot decrease how often it is called.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Array Element in Foreach loop 1 Answer
Objects Instantiated in a Loop Problem 1 Answer
Play audio.PlayOneShot() once in an Update() function 2 Answers