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 Rick74 · Sep 20, 2013 at 05:39 PM · javascript-specificpausegame

Pausing the game, yet having different functions/animations still running?

Hey guys, I was curious what was the best method for pausing the game, yet still allowing different functions/animation to run. Stuff like camera movement, perhaps some animations...that sort of thing.

I did some searching and found;

http://docs.unity3d.com/Documentation/ScriptReference/Time-timeScale.html

However, and not surprising, this stops everything.

Thansk!

Comment
Add comment · Show 1
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 robertbu · Sep 20, 2013 at 06:47 PM 1
Share

One idea is to create your own time variable either as a static variable or as part of a singleton. Rather than scale things by Time.deltaTime, you scale thing by your own time variable. Your variable is incremented by Time.deltaTime when running, and not incremented when paused.

2 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by Shkarface-Noori · Sep 20, 2013 at 09:50 PM

all you have to do is to get the paused state for the one that's based on it like:

 function DoSome(){
  if (Time.timeScale==0.0) return;
  // Do other codes here
 }
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 Rick74 · Sep 20, 2013 at 11:12 PM 0
Share

Would this method work for functions in motion already that you don't want stopped?

avatar image
0

Answer by Rick74 · Sep 21, 2013 at 03:59 PM

Well having researched this, I went back to an old tutorial created on th Walkerboys website for their 2d mario game tutorial, and they covered this beautifully.

I cannot take credit for their script of course, but they used Robertbu's suggested method.

While a bit lengthy, this script allows the user access to all sorts of pause functionality, stop timers, count down timers, restart timers...you name it! For those interested, here's the script;

 // Time Tool Component
 // Walker Boys (www.walkerboystudio.com)
 // March 8, 2011
 // Description: Time component for counting up and down. Provides the following functionality
 // Counts in days, hours, minutes, seconds, fractions, clock time, numeric count (game time)
 // Start time, From Load time, Stop time, Continue time Up, Continue time Down, Reset time, Count Down time, Add Time Once/Multi, Since Startup
 // Designed to view and be used in GUISkin, GUILabel, Animated Texture Sheets (number 0-9), Console and Inspector
 
 var aniFont1 : GameObject;                                // holds a sprite sheet - should be a number sheet 0-9
 var aniFont2 : GameObject;                                // holds a sprite sheet - should be a number sheet 0-9
 var aniFont3 : GameObject;                                // holds a sprite sheet - should be a number sheet 0-9
 var aniFont4 : GameObject;                                // holds a sprite sheet - should be a number sheet 0-9
 
 var marioGui : GUISkin;                                    // used for gui text if you want to use a ttf instead of image
 var GUIToggle             : boolean     = false;            // toggle to show gui text on screen (debug)
 
 var playTime             : float     = 0.0;                // playTime is the current time printed to screen - think of it like current game time
 var days                 : int       = 0.0;                // days
 var hours                : int       = 0.0;                // hours
 var minutes              : int       = 0.0;                // minutes
 var seconds              : int       = 0.0;                // seconds
 var fraction             : int       = 0.0;                // fractions
 
 var startTime              : float     = 0.0;                // used to store current start time when pressed
 var fromLoadTime           : float     = 0.0;                // used to store original load time
 var stopTime            : float     = 0.0;                // used to stop time in game
 var continueTimeUp        : float     = 0.0;                // used to continue time up from stopped time
 var continueTimeDown     : float     = 0.0;                // used to continue time down from stopped time
 var countDownDelay        : float     = 0.0;                // used to delay time during counting
 var countDownAmount        : float     = 0.0;                // amount to delay each time
 
 var delayTime            : float     = 0.0;                // hold delayTime
 var delayRate               : float     = 0.0;                // hold delayRate
 var addToTime            : float     = 0.0;                // used to add Time to current playTime
 var addTimeAmount        : float     = 0.0;                // amount to add to Time
 var realTime             : float     = 0.0;                // holds real time since start of game regardless of pausing
 
 var playTimeEnabled          : boolean     = false;            // toggle for playTime
 var realTimeEnabled      : boolean     = false;            // toggle for realTime
 var fromLoadTimeEnabled    : boolean     = false;            // toggle for loadTime
 var continueTimeEnabled : boolean     = false;            // toggle for continueTime
 var countDownEnabled    : boolean     = false;            // toggle for countDown
 
 // This is our 2D Ani Sprite Sheet with minor modifications to work with Time. Define 'type' with: font1, font2, font 3, font 4
 function aniSprite ( spriteObject, columnSize, rowSize, colFrameStart, rowFrameStart, totalFrames, type:String)
 {
     var index : int = playTime;                            // to control frame location, playTime will equal the index count
     
     var font1 = ( index % 10 );                            // font1 position
     var font2 = ( ( index - font1 ) / 10 ) % 10;        // font2 position 
     var font3 = ( ( index - font1 ) / 100 ) % 10;        // font3 position
     var font4 = ( ( index - font1 ) / 1000 ) % 10;        // font4 position
 
     if ( type == "font1" ) index = font1;                // check for which sprite sheet to use - font1
     if ( type == "font2" ) index = font2;                // check for which sprite sheet to use - font2
     if ( type == "font3" ) index = font3;                // check for which sprite sheet to use - font3
     if ( type == "font4" ) index = font4;                // check for which sprite sheet to use - font4
     
     //print ( font4 + "  " + font3 + "  " + font2 + "  " + font1 );    // print to console to see it split the numbers correctly
 
     var size = Vector2 ( 1.0 / columnSize, 1.0 / rowSize );    // find scale to show on poly 
 
     var u = index % columnSize;                                // u cord separated from v, to find just the column and mod it
     var v = index / columnSize;                                // v finds location on row based on columnSize count
     
     var offset = Vector2 ( ( u + colFrameStart ) * size.x, ( 1.0 - size.y ) - ( v + rowFrameStart ) * size.y );    // offset uv's
     
     spriteObject.renderer.material.mainTextureOffset = offset;     // apply the offset amount to the correct sprite sheet object
     spriteObject.renderer.material.mainTextureScale  = size;     // apply the scale amount to the correct sprite sheet object
 
     // Remember if you want additional texture maps, add them here. Example of normal map below
     // spriteObject.renderer.material.SetTextureOffset ("_BumpMap", offset);
     // spriteObject.renderer.material.SetTextureScale  ("_BumpMap", size);
 }
 
 function Update ()
 {
 if (aniFont1 != null) aniSprite ( aniFont1, 10, 1, 0, 0, 10, "font1" );    // animated font sprite - type: font1
 if (aniFont2 != null) aniSprite ( aniFont2, 10, 1, 0, 0, 10, "font2" );    // animated font sprite - type: font2
 if (aniFont3 != null) aniSprite ( aniFont3, 10, 1, 0, 0, 10, "font3" );    // animated font sprite - type: font3    
 if (aniFont4 != null) aniSprite ( aniFont4, 10, 1, 0, 0, 10, "font4" );    // animated font sprite - type: font4
 
     days     = ( playTime / 86400 ) % 365;                // divide playtime by number of seconds in a day
     hours    = ( playTime / 3600 ) % 24;                // divide playtime by number of seconds in an hour
     minutes  = ( playTime / 60 ) % 60;                    // divide playtime by number of seconds in a minute
     seconds  = ( playTime % 60 );                        // modulo playtime by number of seconds  
     fraction = ( playTime * 10 ) % 10;                    // multiply playtime by 10 and mod of 10
 
 /// part 1 - start time
     if ( playTimeEnabled && !countDownEnabled )            // if playTime standard is enabled use this formula
         playTime = Time.time - startTime - continueTimeUp + addToTime;    // playTime is current time since start
 
     if ( Input.GetKeyDown ( "1" ) )                        // press to activate startTime
     {
         startTime          = Time.time;                      // startTime equals current time (Time.time)
         addToTime          = 0;                            // reset add time
         continueTimeUp      = 0;                            // reset continue time
         playTimeEnabled  = true;                        // set to true
         countDownEnabled = false;                        // reset to false
     }
 
 /// part 2 - from load time
     if ( Input.GetKeyDown ( "2" ) )                        // press to activate start of scene time
     {
         fromLoadTime = Time.timeSinceLevelLoad;         // store current fromLoadTime
         startTime             = 0;                        // reset start time
         addtoTime             = 0;                        // reset add to time
         playTimeEnabled     = false;                    // reset to false
         realTimeEnabled     = false;                    // reset to false
         countDownEnabled     = false;                    // reset to false
         fromLoadTimeEnabled    = true;                        // set to true
     }
     if ( fromLoadTimeEnabled && !playTimeEnabled )        // if loadTime is true, enable this one for playTime
         playTime = Time.timeSinceLevelLoad + addToTime;    // playTime is current time since start
 
 /// part 3 - stop time - stop and game pause
     if ( Input.GetKeyDown ( "3" ) )                        // press to activate stop timer
     {
         stopTime             = playTime;                    // hold stop time
         addToTime             = 0;                        // reset add time
         playTimeEnabled     = false;                    // time active set to false
         continueTimeEnabled = false;                    // reset to false
         realTimeEnabled     = false;                    // reset to false
         countDownEnabled     = false;                    // reset to false
         fromLoadTimeEnabled    = false;                    // reset to false
     }
     if ( Input.GetKeyDown ( "4" ) )                        // key down to activate pause game time
     {
         Time.timeScale = 0.0;                            // actually scale time to nothing
     }
     else if (Input.GetKeyUp ( "4" ) )                    // key up to return time to default
     {
         Time.timeScale = 1.0;                            // return time scale to 1
     }
 
 /// part 4 - continue time - continue from stopped time
     if ( Input.GetKeyDown ( "5" ) )                        // press to continue playTime
     {
         continueTimeUp   = Time.time - stopTime;        // get playTime start
         startTime          = 0;
         addToTime          = 0;                            // reset add time
         playTimeEnabled  = true;                        // start timer again
         countDownEnabled = false;                        // reset to false
     }        
 
 /// part 5 - reset time
     if ( Input.GetKeyDown ( "6" ) )                        // press to reset playTime
     {
         stopTime             = 0;                        // reset stopTime to zero
         playTime             = 0;                        // reset playTime to zero
         continueTimeUp         = 0;                        // store current to continue for subtracting above
         addToTime            = 0;
         continueTimeEnabled = false;                    // reset to false
         realTimeEnabled     = false;                    // reset to false
         fromLoadTimeEnabled = false;                    // reset to false
         countDownEnabled     = false;                    // reset to false
         playTimeEnabled     = false;                    // reset to false
     }    
 
 /// part 6 - count down time (to and from -> simple 'if' statement)
     if ( playTimeEnabled && countDownEnabled )            // if countDown enabled, then use this for playTime
     {
         playTime = countDownDelay - Time.time + countDownAmount + continueTimeDown;    // get playTime start
     }    
     if ( Input.GetKeyDown ( "7" ) )                        // press to countdown time
     {
         countDownDelay      = Time.time;                    // store current time in countDownDelay
         playTimeEnabled  = true;                        // start timer again
         countDownEnabled = true;                        // start counting down
         addToTime          = 0;                            // reset add time
         continueTimeDown = 0;                            // reset continue time
     }    
     if ( Input.GetKeyDown ( "t" ) )                        // count down from current stop time
     {
         continueTimeDown = stopTime - ( countDownDelay - Time.time + countDownAmount );    // get time to continue from
         startTime          = 0;                            // reset start time 
         addToTime          = 0;                            // reset add time
         playTimeEnabled  = true;                        // start timer again
         countDownEnabled = true;                        // reset to false        
     }
     if ( playTime < 0 )                                    // simple stop for countDown
     {
         playTimeEnabled  = false;                        // stop timer - playTime
         countDownEnabled = false;                        // stop timer - countDown
     }
 
 /// part 7 - delay time
     if ( playTime > delayTime )                            // check for time more than delay
     {
         delayTime = Time.time + delayRate;                // add delay amount (rate) to time for next delay amount
     //    print ("delayed for " + delayRate + " seconds");
     }    
 
 /// part 8 - add to time
     if ( Input.GetKeyDown ( "8" ) )                        // press to activate add to timer
     {
         addToTime = addTimeAmount;                        // adds single amount to timer
     }
     if ( Input.GetKeyDown ( "9" ) )                        // press to activate add to timer
     {
         addToTime += addTimeAmount;                        // adds increment amount to timer
     }
 
 /// part 9 - actual time since start of game            // if gamePAUSED, this still keeps actual time
     if ( Input.GetKeyDown ( "0" ) )                        // press to activate startTime
     {
         realTime              = Time.realtimeSinceStartup;// store real time since startup
         startTime             = 0;                        // reset start time
         addToTime             = 0;                        // reset add to time
         playTimeEnabled     = false;                    // turn off play time
         realTimeEnabled     = true;                        // set real time on
         fromLoadTimeEnabled = false;                    // turn off load tim
     }
     if ( realTimeEnabled && !playTimeEnabled && !fromLoadTimeEnabled )        // if real time enabled, use this for playTime
         playTime = Time.realtimeSinceStartup + addToTime;                    // playTime is now real time since startup
 }
 
 function OnGUI ()                                                            // print time variables to the screen (gui)
 {
     if ( GUIToggle )                                                        // toggle visibility on/off
     {
         GUILayout.Label ( "PlayTime " + playTime.ToString ( "f4" ) );          //  display on gui - playtime
         GUILayout.Label ( "1 - Start the Time"       );                        //  display on gui - start time
         GUILayout.Label ( "2 - From Load Time"         );                        //  display on gui - from load time 
         GUILayout.Label ( "3 - Stop Time"            );                        //  display on gui - stop time    
         GUILayout.Label ( "4 - Pause Game Time"     );                        //  display on gui - pause game (scale time)    
         GUILayout.Label ( "5 - Continue Time Up"       );                        //  display on gui - continue time up
         GUILayout.Label ( "T - Continue Time Down"     );                        //  display on gui - continue time down
         GUILayout.Label ( "6 - Reset Time"            );                        //  display on gui - reset time
         GUILayout.Label ( "7 - Count Down Time"        );                        //  display on gui - count down time
         GUILayout.Label ( "8 - Add to Time Once"    );                        //  display on gui - add to time once
         GUILayout.Label ( "9 - Add Time Multi"      );                        //  display on gui - add time multi
         GUILayout.Label ( "0 - Since Startup Time"    );                        //  display on gui - since start up time
         GUILayout.Label ( "Days: "         + days.ToString      ( "f0" ) );      //  display on gui - days
         GUILayout.Label ( "Hours: "     + hours.ToString      ( "f0" ) );      //  display on gui - hours
         GUILayout.Label ( "Minutes: "     + minutes.ToString      ( "f0" ) );      //  display on gui - minutes
         GUILayout.Label ( "Seconds: "     + seconds.ToString      ( "f0" ) );      //  display on gui - seconds
         GUILayout.Label ( "Fraction: "     + fraction.ToString  ( "f0" ) );      //  display on gui - fraction
         GUILayout.Label ( "Delay Time " + delayTime.ToString ( "f0" ) );    //  display on gui - delay amount time
         
         if (marioGui != null) GUI.skin = marioGui;    // Print current Play Time to the screen with a Gui skin (font from Mario Bros)
         GUI.Label (Rect ( Screen.width / 2, 10, 1000, 100), "" + playTime.ToString("f1"));    // print gui text center on screen
     }
 }
 
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

Picking a language... 1 Answer

OnCollisionEnter If statement error 1 Answer

If statment based on a function not working 3 Answers

Why doesn't this animation script work? 3 Answers

What was the last version of unity to support javascript? 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