Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 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 NerdRageStudios · Jul 13, 2014 at 11:53 AM · coroutinegetcomponentyeild

Temporary Buff scripts and timers

Hi all, I am using the following script to add a set amount of health to the player for 30 seconds.

When I press "2" to test it the script works fine, I see the buff apply, then disappear, however if I run it again the buff applies but never disappears again (its like the timer only functions once)

Also, I cant figure out how to stop this from stacking if I keep triggering it.

Any help on this would be greatly appreciated :)

 using UnityEngine;
 using System.Collections;
 
 public class ScriptTempHealthBuff : MonoBehaviour {
 
     ScriptPlayerOneManager script;
   
     public int healthBuffAmount = 30;
     public int healthBuffDuration = 5;
 
     // Use this for initialization
     void Start () {
     script = GameObject.Find("GameObjectPlayerOne").GetComponent<ScriptPlayerOneManager>();
     StartCoroutine(playerHealthBuffTimer());
 
     }
     
     // Update is called once per frame
     void Update () {
 
         if (Input.GetKeyDown("2"))
         {
         script.playerTempAttributes.playerOneTempHealth += healthBuffAmount;
         playerHealthBuffTimer();
         }
      
     }
 
     // Now run a timer
     IEnumerator playerHealthBuffTimer()
     {
         yield return new WaitForSeconds(healthBuffDuration);
         playerHealthBuffUndo();
     }
 
     //Now return the value back to original
     void playerHealthBuffUndo()
     {
         script.playerTempAttributes.playerOneTempHealth -= healthBuffAmount;
     }
 }
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
1
Best Answer

Answer by alwayscodeangry · Jul 13, 2014 at 12:04 PM

I think your first problem is on line 24, you should be calling StartCoroutine(playerHealthBuffTimer()); (I make this mistake all the time :P)

Are you aware you're calling the coroutine in Start() as well?

To fix the stacking issue, just add a bool field, set it to true when you start the timer, set it to false when the timer ends, and check that it is false before activating the buff.

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 NerdRageStudios · Jul 13, 2014 at 12:53 PM

That's fantastic, thank you very much, it worked a treat :)

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

22 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

Related Questions

How to disable a script on a bunch of instantiated objects with tag ? 1 Answer

Performance issues with GetComponent/gameObject.Find in different functions 1 Answer

Powerup issue - Speed 1 Answer

Yield WaitForSeconds Not Working. Coroutine. 1 Answer

Damager Powerup issue - NullReferenceException: Object reference not set to an instance of an object 2 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