x


Timer For Occasional Action

I've done some searching, and have found a few examples that KIND OF touch on what I'm looking to do, but I'm getting some odd behavior.

I'm looking to create a timer that will execute a block of code every, say, 5 minutes. My thought was to use "VALUE % INTERVAL" and if the value was 0, execute the code.

In a short test, however, I'm getting something...unusual (C#):

void Update()
{
    float count = Mathf.Floor(Time.time % 10.0f);
    if (count == 0)
    {
         print("OK!");
    }
}

I figure that in this case, a simple Time.time mod 10 would eventually tick over to 0, then would start again as Time.time continued on it's way. The Mathf.Floor() is there because otherwise, a modulus operation could return 0.1, 0.2, 0.5, etc, when all I want is 0.

However, when simply debugging the Mathf.Floor(Time.time % 10.0f), the output window counts to 9...and then stops. It doesn't flip over or anything.

I've looked at other timer methods mentioned around here, but none seem to work for what I'm looking to do. I noticed one, written in JS, but when I attempted to translate to C# for my purposes, didn't fit the bill.

Any suggestions?

Thanks! Chris

more ▼

asked Apr 18 '10 at 12:38 AM

scopique gravatar image

scopique
28 4 4 7

(comments are locked)
10|3000 characters needed characters left

2 answers: sort voted first

My suggestion would be to use Invoke or InvokeRepeating and set the time to however long you want.

void Start () {
    InvokeRepeating("SayHello", 0, 10);
}

void SayHello () {
    print("Ok");
}
more ▼

answered Apr 18 '10 at 01:53 AM

Peter G gravatar image

Peter G
15k 16 44 136

Oh man. Thanks for the heads up. :D I'll give this a shot.

Apr 18 '10 at 04:33 PM scopique
(comments are locked)
10|3000 characters needed characters left

Peter's solution is best, InvokeRepeating will do exactly what you want. But to address your counting code not work (since I already ran a test :) , I suspect it's a typo in your code. I did this:

public float count;
void Update () {
    count = Mathf.Floor(Time.time % 10.0f);
}

And it worked as expected. Looking at it in the Inspector, count went from 1,2,3...9,0,1,2,3...

more ▼

answered Apr 18 '10 at 02:06 AM

Cyclops gravatar image

Cyclops
7.1k 33 63 115

Hmmm. You're right. I was using print(count); to check the values in the console, but in the Inspector, it rolls over normally.

I'm going to chalk it up to weirdness, and give Peter's answer a go.

Thanks!

Apr 18 '10 at 04:37 PM scopique

Something similar happened to me and it turned out that I just needed to uncheck "collapse" in the Unity console window. When collapse is on it causes repeated print statements not to be shown.

Jun 09 '10 at 07:27 AM Ony

@Jak, yeah, that could be it. I do remember some other surprises from collapse.

Jun 09 '10 at 02:00 PM Cyclops
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x347
x2

asked: Apr 18 '10 at 12:38 AM

Seen: 1636 times

Last Updated: Apr 18 '10 at 12:38 AM