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 JustACode · Sep 04, 2020 at 07:49 PM · unity 2dcrashingrecovery

Hey, I'm trying make an auto energy recovery system with my game (2D) with a while loop. I found that it crashes my unity and I need help in fixing it.

using System.Collections; using System.Collections.Generic; using UnityEngine;

public class PlayerInfo : MonoBehaviour {

 public int maxHealth = 8;
 public int currentHealth;
 public int maxEnergy = 8;
 public int currentEnergy;

 public HealthBar healthBar;
 public EnergyBar energyBar;

 //Timers
 public IEnumerator RecoveryTime()
 {
     yield return new WaitForSeconds(10f);
     RecoverEnergy(1);
     Debug.Log("Plus 1");
 }

 public IEnumerator CoolDown()
 {
     yield return new WaitForSeconds(1f);
 }

 // Start is called before the first frame update
 void Start()
 {
     currentHealth = maxHealth;
     healthBar.SetMaxHealth(maxHealth);
     currentEnergy = maxEnergy;
     energyBar.SetMaxEnergy(maxEnergy);
 }

 // Update is called once per frame
 void Update()
 {
     //Health Damage
     if (Input.GetKeyDown(KeyCode.E))
     {
         TakeDamage(1);
     }

     //Energy Damage
     if (Input.GetKeyDown(KeyCode.Space))
     {
         TakeEnergy(1);
         StartCoroutine(CoolDown());
     }

     //Energy Recover
     while (currentEnergy < maxEnergy)
     {
         StartCoroutine(RecoveryTime());
     }
     
 } 

 void TakeDamage(int damage)
 {
     currentHealth -= damage;

     healthBar.SetHealth(currentHealth);
 }

 void TakeEnergy(int used)
 {
     currentEnergy -= used;

     energyBar.SetEnergy(currentEnergy);
 }

 void RecoverEnergy(int recover)
 {
     currentEnergy += recover;

     energyBar.SetEnergy(currentEnergy);
 }

}

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

1 Reply

· Add your reply
  • Sort: 
avatar image
2

Answer by unity_ek98vnTRplGj8Q · Sep 04, 2020 at 08:29 PM

Update runs on the main unity thread, so if you have a while loop in your update method it will freeze unity until the while loop is done. Try putting the while loop in your coroutine instead.

  private bool coroutineRunning = false;
 
 //Replace the while loop in your update method
  if ((currentEnergy < maxEnergy) && !coroutineRunning) {
      StartCoroutine (RecoveryTime ());
  }
 
  public IEnumerator RecoveryTime () {
      coroutineRunning = true;
      while(currentEnergy < maxEnergy){
         yield return new WaitForSeconds (10f);
         RecoverEnergy (1);
         Debug.Log ("Plus 1");
      }
      coroutineRunning = false;
      
  }
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

142 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

Related Questions

Unity2D Crashes when switching to Scene View 0 Answers

Game crashes on Android the second it loads (no splash screen) 2 Answers

Why is my Unity IOS App crashing after uploading it to xCode? 0 Answers

My android game is crashing on stock nexus 4 running Android 5.1.1 . My unity versioin 4.6.7p2 ? Its running on other android devices.I've attached logcat.But i don't understand it.Need urgent help 1 Answer

Editor Crash : nvwgf2um.dll caused an Access Violation 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