- Home /
timer, corutines, constant deltaTime, metronome like
I'm stuck with a simple metronome...
Let's say I want to play a sound 5 times per second, with time btw notes being constant. Again, just like a metronome. so I tried this code:
void LateUpdate()
{
dt_sum += Time.fixedDeltaTime;
time_btw_notes = 60f / 300f;
if (dt_sum >= time_btw_notes)
{
snare.audio.Play();
dt_sum -= time_btw_notes;
}
}
It works well at 150fps: constant sound real life time distance. But then I add a super particle system to drop fps to less than 30 and distance btw sounds is no longer constant.
I've tried with corutines too:
void Start()
{
StartCoroutine(WaitAndPrint(0.2F));
}
IEnumerator WaitAndPrint(float waitTime)
{
while (true)
{
snare.audio.Play();
yield return new WaitForSeconds(waitTime);
}
}
Same problem...
Is there a way to fix this, threads? I've read somewhere no Unity functions can be called in a plain c# thread... Also heard somewhere I can make LateUpdate() to be called as much often as I want but it would also process physics...
Any ideas? Thanks
Answer by Bunny83 · Feb 01, 2012 at 11:01 PM
You have mixed up a few things, LateUpdate is just like Update but it is called after all Updates. Time.fixedDeltaTime belongs to FixedUpdate() and shouldn't be used anywhere else. Also you shouldn't even use fixedDeltaTime for time corrections in FixedUpdate. Just use Time.deltaTime. It returns always the correct delta depending on from which callback you read it.
edit
You can also use InvokeRepeating which seems to be very accurate and has minimal overhead.
First, thanks. InvokeRepeating works better, but still isn't what I was expecting. I used
void Start()
{
InvokeRepeating("LaunchProjectile", 2, 0.2F);
}
void LaunchProjectile()
{
snare.audio.Play();
}
I'm testing now with the normal Update and normal deltaTime but using:
Application.targetFrameRate = 30;
Work's as expected so I guess an audio.Play delay isn't the problem... Any other ideas? I'm making a test app to see some results graphically.
Your answer
Follow this Question
Related Questions
C# Digital Timer 2 Answers
If "equals" doesnt work. 3 Answers
countdown timer acivation 1 Answer
Unity hand-made timer doesnt work? 1 Answer
Use timer to remove text 2 Answers