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 Ediezac · Dec 13, 2017 at 12:58 PM · frameratetime.time

How to create a framerate independent time delay in Update() without coroutines

I'm creating a turn based board game and trying to create a small pause between the cpu and human player. All my logic is in the Update() function so I can't use coroutines to simulate the pause so I created a method to try delay the time.

 void miniPause ()
     {
         maxPauseTime = Time.realtimeSinceStartup + 2.5f;
         while (Time.realtimeSinceStartup < maxPauseTime) {
             /*
              *Empty loop to create a time delay
              *between the Player && CPU turns
              */
             print ("Time  = " + Time.realtimeSinceStartup);
         }//end loop
     }

 void Update(){
    if(cpu.turn){
    
     miniPause();
     
     //instantiate cpu's piece on the board
      humanPlayer.turn = true;
      cpu.turn = false
    }
    if(humanPlayer.turn){   
       if(Input.Input.GetMouseButtonDown (0)){
         
         //Instantiate human player's piece on the board here
            humanPlayer.turn = false;
            cpu.turn = true
         }
    }
 }

The delay is created alright, problem is everything else pauses as well, like the the board piece stays suspended in mid-air until delay elapses then falls to the board with the cpu's piece.

Is there a way to halt the cpu player without stopping everything else like navmesh motion, particle effects.

Comment
Add comment · Show 3
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 Zetya96 · Dec 13, 2017 at 01:29 PM 0
Share

You have a loop in the update, that blocks the whole update loop until 2.5s. Thats why your program freeze.

You could make a something like this:

 bool wait = false;
 
 
 void Update() {
 
    if(!pause) {
 
       /*GA$$anonymous$$E LOGIC*/
 
       if([PLAYER ENDTURN]) {
          pause = true;
          StartCoroutine(Count());
 }
 
 Ienumerator Count() {
   yield return new WaitforSeconds(2.5f);
   pause = false;
 }
avatar image Ediezac Zetya96 · Dec 13, 2017 at 04:32 PM 0
Share

I've been trying the subroutine way but it didn't work because of my approach. I wasn't forcing the cpu to stop I was just running the subroutine. That "pause" variable did the trick! Thank you kind sir! ...or maam, it works like a charm now.

avatar image Zetya96 Ediezac · Dec 13, 2017 at 05:32 PM 0
Share

Oops, I messed up the variable name.. Glad it works!

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by Larry-Dietz · Dec 13, 2017 at 04:47 PM

try something like this.

In the declarations section at the top`...

 public float CPUMoveTimer;

then in your update ...

  if(cpu.turn){
         
         if (CPUMoveTimer>0){
               CPUMoveTimer-=Time.deltaTime;
         } else {
           //instantiate cpu's piece on the board
             humanPlayer.turn = true;
             cpu.turn = false
         }         
     }
 if(humanPlayer.turn){   
        if(Input.Input.GetMouseButtonDown (0)){
          
          //Instantiate human player's piece on the board here
             humanPlayer.turn = false;
             cpu.turn = true
             CPUMoveTimer=2.5f;
          }
     }
  }

Might be a better way of doing it, but this is what I normally do in this situation, and it works.

Hope it helps, -Larry

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

73 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

Related Questions

Heavy Processing Messes With Time.time 1 Answer

Low FPS on Simple geometry? 4 Answers

Unity 2017 frame rate capped? 2 Answers

Limit framerate on just a camera, not whole application? 2 Answers

HDRP Reflection probes cause terrible framerate 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