• 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
2
Question by Stefan Alexander · Aug 21, 2014 at 08:46 PM · game

Add 1 health point every second. (Regenerate Health)

I am making a survival game and I want to make my player regenerate one health point every second until it reaches 100 and then stops. Any ideas on how to script this would be greatly appreciated. Thanks.

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

4 Replies

· Add your reply
  • Sort: 
avatar image
2

Answer by Kiwasi · Aug 21, 2014 at 11:32 PM

Here's an alternate coroutine for the job. (C#)

 void Start() {
    StartCoroutine(RegenerateHealth());
 }
  
 IEnumerator RegenerateHealth() {
    while (true){
        health = Mathf.Clamp(health + 1, -100,100);
        yield return new WaitForSeconds(1);
    }
 }

This coroutine is basically set and forget. Also worth noting there is nothing in the Update loop that is checked every frame, so this method will perform better.

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
1

Answer by AngryBurritoCoder · Aug 21, 2014 at 09:00 PM

This might help, got some free time... bool onRegenHealth = false;

 void Update()
 
 if(health < 100 && onRegenHealth == false )
 {
    onRegenHealth = true;
    StartCoroutine("RegenHealth");
 }
 
 IEnumerator RegenHealth()
 {
    health += 1;
    yield return new WaitForSeconds(1);
    onRegenHealth = false;
 }
Comment
Add comment · Show 11 · 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 Stefan Alexander · Aug 21, 2014 at 10:05 PM 0
Share

Thanks for taking the time to help me out :) The only problem mis that I get the error:

"UCE0001: ';' expected. Insert a semicolon at the end."

The annoyingly stupid thing is that there IS a semicolon at the end of the line. Any ideas?

BTW, here's the script I have :

 #pragma strict
 
 var $$anonymous$$axHealth = 100;
 var Health : int;
 bool onRegenHealth = false;
 
 
 function Start ()
 {
     Health = $$anonymous$$axHealth;
 }
 
 function ApplyDammage (TheDammage : int)
 {
     Health -= TheDammage;
     
     if(Health <= 0)
     {
         Dead();
     }
 }
 
 function Update()
 {
     if(health < 100 && onRegenHealth == false )
     {
         onRegenHealth = true;
            StartCoroutine("RegenHealth");
     }
  
     IEnumerator RegenHealth()
     {
         Health += 1;
         yield return new WaitForSeconds(1);
         onRegenHealth = false;
     }
 }
 
 function Dead()
 {
     Respawn$$anonymous$$enuV2.playerIsDead = true;
     Debug.Log("Player Died");
 }
 
 function RespawnStats ()
 {
     Health = $$anonymous$$axHealth;
 }
avatar image AngryBurritoCoder · Aug 21, 2014 at 10:27 PM 0
Share

yep, sorry maybe its because its supposed to be

 StartCoroutine(RegenHealth());

not StartCoroutine("RegenHealth");

avatar image Stefan Alexander · Aug 21, 2014 at 10:32 PM 0
Share

Nope, still has the same error on lines 5 & 34.

avatar image AngryBurritoCoder · Aug 21, 2014 at 10:47 PM 1
Share

try yield WaitForSeconds(1);

avatar image AngryBurritoCoder · Aug 21, 2014 at 10:52 PM 1
Share

you are right, in unityscript its... function RegenHealth() and if theres another error... ins$$anonymous$$d of startcoroutine you can do RegenHealth(); but that shouldnt be a problem as its the same

Show more comments
avatar image
1

Answer by Reivaj28 · Aug 21, 2017 at 03:33 PM

Without coroutine:

 void Start () {
        InvokeRepeating("AddHealth", 1, 1);
 }

 void AddHealth()
 {
     if(health < 100)
        health++;
     else
         CancelInvoke("AddHealth");
 }

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 Cherno · Aug 21, 2014 at 09:08 PM

 private float t = 0.0f;
 private float threshold = 1.0f;
 int health = 20;
 
 void Update() {
      t += Time.deltaTime;
      if(t >= threshold) {
           t = 0.0f;
           health ++;
      }
 
 }
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.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

25 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

Related Questions

getting udp package info inside unity (GlovePIE) 0 Answers

How To Make A Gun Scope Zoom In 2 Answers

how do you put the slenderman in unity3d 0 Answers

Horror Game AI script recommendation? 1 Answer

how to select an object in game mode ? 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