Search code examples
c#unity-game-enginebackground-process

Can counter/timer run in background?


Can i run timer in background. When i minimize game then my timer should be works continue can i do ?

I was try Application.runInBackground=true; but it can't works.

public class Counter : MonoBehaviour
 {
         public Text counterText;
         private int counterValue;

         // Use this for initialization
         void Start ()
         {
                 Application.runInBackground=true;
                 StartCoroutine ("StartCounter");
         }

         IEnumerator StartCounter ()
         {
                 yield return new WaitForSeconds (1f);
                 counterText.text = "Counter : " + counterValue.ToString ();
                 counterValue++;
                 StartCoroutine ("StartCounter");
         }
 }

Solution

  • I have found answer of my question. Special Thanks to Mr.Dinal24. With the help of Mr.Dinal24 i can get my answer with update some stuff and it's very much helpful to me.

    NOTE : THIS CODE WORKS FOR ANDROID AND IOS BOTH (FOR IOS MUST REQUIRED UNITY 4.6.1 OR ABOVE)

    using UnityEngine;
    using UnityEngine.UI;
    using System.Collections;
    using System;
    
    public class Counter : MonoBehaviour
    {
    
            public Text counterText, pauseText, resumeText, msgText;
    
            private int counterValue, focusCounter, pauseCounter;
            private DateTime lastMinimize;
            private double minimizedSeconds;
    
            void OnApplicationPause (bool isGamePause)
            {
                    if (isGamePause) {
                            pauseCounter++;
                            pauseText.text = "Paused : " + pauseCounter;
                            GoToMinimize ();
                    } 
            }
    
            void OnApplicationFocus (bool isGameFocus)
            {
                    if (isGameFocus) {
                            focusCounter++;
                            resumeText.text = "Focused : " + focusCounter;
                            GoToMaximize ();
                    } 
            }
    
            // Use this for initialization
            void Start ()
            {
                    StartCoroutine ("StartCounter");
                    Application.runInBackground = true;
            }
    
            IEnumerator StartCounter ()
            {
                    yield return new WaitForSeconds (1f);
                    counterText.text = "Counter : " + counterValue.ToString ();
                    counterValue++;
                    StartCoroutine ("StartCounter");
            }
    
            public void GoToMinimize ()
            {
                    lastMinimize = DateTime.Now;
            }
    
            public void GoToMaximize ()
            {
                    if (focusCounter >= 2) {
                            minimizedSeconds = (DateTime.Now - lastMinimize).TotalSeconds;
                            msgText.text = "Total Minimized Seconds : " + minimizedSeconds.ToString ();
                            counterValue += (Int32)minimizedSeconds;
                    }
    
            }
    
    
    }