后台可以counter/timer运行吗?
Can counter/timer run in background?
我可以 运行 后台计时器吗?当我最小化游戏时,我的计时器应该可以继续工作,我可以吗?
我尝试了 Application.runInBackground=true;
,但行不通。
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");
}
}
你可以这样做,
有一个脚本来检查应用程序是否最小化,要检查应用程序的状态是否可以使用,OnApplicationFocus
。
DateTime lastMinimize;
int timer; // what ever the type you want
// change the value when you game is sent to background
// make sure this is changed before actual minimize happen
public void aboutToMinimize(){
lastMinimize = DateTime.Now;
}
public void gotMaximized() {
timer = (DateTime.now - lastMinimize).getMillis();
}
//now use the timer value to reset the timer
我找到了问题的答案。
特别感谢 Dinal24 先生。
在 Mr.Dinal24 的帮助下,我可以通过更新一些内容得到我的答案,这对我很有帮助。
注意:此代码适用于 ANDROID 和 IOS 两者(对于 IOS 必须要求 UNITY 4.6.1 或更高版本)
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;
}
}
}
我可以 运行 后台计时器吗?当我最小化游戏时,我的计时器应该可以继续工作,我可以吗?
我尝试了 Application.runInBackground=true;
,但行不通。
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");
}
}
你可以这样做,
有一个脚本来检查应用程序是否最小化,要检查应用程序的状态是否可以使用,OnApplicationFocus
。
DateTime lastMinimize;
int timer; // what ever the type you want
// change the value when you game is sent to background
// make sure this is changed before actual minimize happen
public void aboutToMinimize(){
lastMinimize = DateTime.Now;
}
public void gotMaximized() {
timer = (DateTime.now - lastMinimize).getMillis();
}
//now use the timer value to reset the timer
我找到了问题的答案。 特别感谢 Dinal24 先生。 在 Mr.Dinal24 的帮助下,我可以通过更新一些内容得到我的答案,这对我很有帮助。
注意:此代码适用于 ANDROID 和 IOS 两者(对于 IOS 必须要求 UNITY 4.6.1 或更高版本)
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;
}
}
}