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 code-blep · Jul 28, 2013 at 11:25 PM · functionloopwhilerepeat

Trying to Loop A Function

Hi,

I am trying to loop a function and invoke repeating doesn't fit with my needs. I am trying to use a while loop but no matter what I try it crashes Unity.

Here is an example of the current code:

 function PowerUseage(start : boolean){
     
     while (start == true){    
         if(powerUsageIsRunning == false){
             //Switch so that cycle runs once a second
             powerUsageIsRunning = true;
             
             //Remove Power amount for this second
             //Wait
             yield WaitForSeconds(1);
             
             //Allow cycle to start again
             powerUsageIsRunning = false;
         }
     }    
 }


It seems every time I go near a while loop I crash Unity. Any ideas?

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

2 Replies

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

Answer by robertbu · Jul 28, 2013 at 11:40 PM

The problem is that if start != true, then a yield is never executed. If a loop does not have a yield or an exit, it hangs Unity. I'm not sure what exit strategy you want here. Since start is passed in and will be local, there is no way for start to be any value other than the one passed in. If you make a new call with 'false' to this Coroutine, it does not reset the value of the original coroutine, but launches a new coroutine, so you have two coroutines running, which will cause all sorts of problems with your value of 'powerUsageIsRunning' variable if you called two with 'true'. Plus the way this is structured, powerUsageIsRunning will never be false. That is you set it to false, and it immediately cycles back to the top and sets it to true without waiting. I think you want something like this:

 function PowerUseage(){
     while (usePower){ 
          powerUsageIsRunning = !powerUsageIsRunning;
          yield WaitForSeconds(1);
        }
     }  
 } 

'usePower' is a variable you define at at the top of the file. You set it to 'false' if you want this routine to terminate. This code will invert the on and of state of powerUsageRunning every second.

Comment
Add comment · Show 1 · 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 code-blep · Jul 29, 2013 at 07:47 PM 0
Share

Finally I get it! And the whole boolean invert method is something I had never thought of. Thanks Robertbu and of course Jamora.

avatar image
1

Answer by Jamora · Jul 28, 2013 at 11:32 PM

While loops keep repeating for as long as its condition is true. You never set your while condition to false, so you never break out of the loop. You need start = false; at some point inside the loop.

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

16 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

Related Questions

How do I call a function containing a while loop, inside the update function? 2 Answers

while loop not looping 2 Answers

How do I repeat a part of my script? 2 Answers

Call a function repeatedly while a boolean is true 3 Answers

While loop crashing 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