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 /
avatar image
0
Question by OrionGamesInc · Jan 16, 2018 at 05:08 PM · c#coroutinecoroutinescountdowncooldown

C# - Coroutines for Abilities

Hi. I am currently trying to create an Ability system in unity using coroutines. I already have the controls set up to activate them, but coroutines always seem a bit tricky to use properly. Simply, each ability the player has will use a cooldown of a set amount and count down until 0. The ability will be unusable during the cooldown, and when the cooldown reaches 0 the ability can be used again, just like in many RPG and Action games.

One Ability for example (below) uses a coroutine to set the players max speed to a higher value, and then reset it after the cooldown reaches 0. However, the coroutine keeps repeating, as it is not stopped anywhere except after the cooldown, and the maxspeed is always increasing, instead of staying at the fixed number.

 IEnumerator Dash(){
         while (true) {
             Debug.Log ("Dash used.");
 
             float maxspeed = PlayerMaxSpeed *= 1.25f;
             float minspeed = PlayerMaxSpeed;
 
             PlayerMaxSpeed = maxspeed;
 
             yield return new WaitForSeconds (//whatever the cooldown is, say 10 seconds);
 
             PlayerMaxSpeed = minspeed;
 
             yield return false;
         }
     }

Any help in this issue will be greatly appreciated.

Comment
Add comment · Show 4
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 Hellium · Jan 16, 2018 at 05:13 PM 0
Share

Why have you a while loop here?

avatar image OrionGamesInc Hellium · Jan 16, 2018 at 05:15 PM 0
Share

not sure, wish i knew more about coroutines than i do, but i believe thats how you use a coroutine

avatar image TreyH OrionGamesInc · Jan 16, 2018 at 05:26 PM 0
Share

You use a coroutine however you see fit. :-) They are blocks of code that will run asynchronously to do whatever you need them to do. Sometimes it makes sense to start a routine and have it run forever, but this doesn't seem to be one of those cases.

avatar image TreyH · Jan 16, 2018 at 05:23 PM 0
Share

I'm confused by your setup. It looks like some player input will trigger this, but then it stays here forever due to the while loop. What is the while loop doing here?

1 Reply

· Add your reply
  • Sort: 
avatar image
1
Best Answer

Answer by dev-waqas · Jan 16, 2018 at 05:24 PM

The while loop is calling this co routine logic again every frame. Simply remove while loop and it will be all fine.

  IEnumerator Dash(){
              Debug.Log ("Dash used.");
  
              float maxspeed = PlayerMaxSpeed *= 1.25f;
              float minspeed = PlayerMaxSpeed;
  
              PlayerMaxSpeed = maxspeed;
  
              yield return new WaitForSeconds (//whatever the cooldown is, say 10 seconds);
  
              PlayerMaxSpeed = minspeed;
  
              yield return null;
          
      }
Comment
Add comment · Show 3 · 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 OrionGamesInc · Jan 16, 2018 at 05:55 PM 0
Share

Thank you. This worked for the most part. However, every time the Ability is used the coroutine activates, and no cooldown is triggered. How would I go about doing this?

avatar image TreyH OrionGamesInc · Jan 16, 2018 at 06:01 PM 1
Share

There isn't anything here that would prevent another one from being activated. You might want to have some flag within the coroutine to handle the cooldown -- is false while the coroutine is running, and then is true once it finishes.

avatar image OrionGamesInc TreyH · Jan 16, 2018 at 06:15 PM 0
Share

I'll try it out, thanks again.

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

435 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 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 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 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 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 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 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 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 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 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

Had difficulties implementing intro to Coroutines from unitypatterns.com. Help? 1 Answer

Generic Cooldown IEnumerator? 1 Answer

Can't get while loop to execute more than once in a coroutine before yielding [Solved] 2 Answers

Toggling bools automatically using coroutines 1 Answer

Multiple Cars not working 1 Answer


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