Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
  • Help Room /
avatar image
0
Question by pixel_fiend · Jul 01, 2016 at 06:56 PM · timerinvokeinvokerepeatingtimer countdown

Simple timer using InvokeRepeating

I have tried making a simple timer script that uses Invoke, and more recently, InvokeRepeating. It seems simple enough, but I'm having an issue where it will blast through the first 10 seconds, calling Tick() in rapid succession.

Here is my current code.

 public class TimerBehavior : MonoBehaviour {
 
     public delegate void TickDelegate(int secondsRemaining);
     public TickDelegate OnTick;
 
     public delegate void CompleteDelegate();
     public CompleteDelegate OnComplete;
 
     int secondsRemaining = 0;
     public void Go(int seconds){
         secondsRemaining = seconds;
         InvokeRepeating("Tick", 0, 1f);
     }
 
     void Tick(){
         if (OnTick != null) { OnTick (secondsRemaining); }
         if (secondsRemaining > 0) {
             secondsRemaining--;
         }
         if(secondsRemaining == 0){
             if(OnComplete != null){ OnComplete(); }
             Stop ();
         }
     }
 
     public void Stop(){
         CancelInvoke ("Tick");
     }
 }

For simplicity-sake, ignore the fact that there will be issues if Go() is called while the timer is already ticking.

Is there anything blatantly wrong with this code?

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

2 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by iamrahulmaurya · Jul 02, 2016 at 02:44 PM

@pixel_fiend Bro,Try this https://www.youtube.com/watch?v=NpJ-S_RxzrQ∈dex=4&list=PLTm4FjoXO7nedF_AHxqgjgtxq1Ktl9ViK

In this it is using Coroutine but you can figure it out easily for InvokeRepeating

Note that InvokeRepeating is also independent of the GameObject's Update() method, and will continue to be invoked even if the object is disabled.

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image
0

Answer by Dibbie · Jul 02, 2016 at 03:26 AM

Your code look fine to me, youd want to run "CancelInvoke" in your "Tick" if Update is calling "Go" or any other function or loop that happens more than once... If Start or a function that is only ever really called once calls "Go" then you shouldnt have any problems at all initially.

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

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

Answers Answers and Comments

46 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Getting a timer to go to 0 1 Answer

Countdown timer... 2 Answers

I need a "loop" timer that disables a action until the timer resets. 0 Answers

How can I make this timer become longer over time? (When I click it memorizes then finishes it increases wait time) 0 Answers

Set a delay for firing 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges