[Unity计时器倒计时,当应用杀死Android时不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Unity计时器倒计时,当应用杀死Android时不起作用相关的知识,希望对你有一定的参考价值。

我对unity和c#还是陌生的,我有一个代码可以在10m后增加能量,我已经使用PlayerPrefs这样做,所以它可以统一工作,但不能在移动设备上工作,请帮忙。我无法理解到底是什么导致了电话问题。当应用程序未终止但在移动设备上最小化时,计时器也会暂停。我希望计时器倒数继续使游戏最小化,并且如果被杀死也可以。

using System;
using UnityEngine;
using UnityEngine.UI;

public class EnergyAdder : MonoBehaviour
{
    // Start is called before the first frame update
    public float waitTime = 600;
    Timer timer;
    public GameRoot gameRoot;
    public int count;
    DateTime currentDate;
    DateTime oldDate;

    void Start()
    {
        //timer = new Timer(waitTime);
        float remainingTime = PlayerPrefs.GetFloat("TimeOnExit");
        timer = new Timer(remainingTime);
        if (PlayerPrefs.HasKey("sysString"))
        {
            currentDate = DateTime.Now;
            long temp = Convert.ToInt64(PlayerPrefs.GetString("sysString"));
            oldDate = DateTime.FromBinary(temp);
            TimeSpan difference = currentDate.Subtract(oldDate);
            count = (int)(difference.TotalSeconds / waitTime);
            Debug.Log("time remaining " + count);
            gameRoot.AddEnergy(count);
            timer = new Timer(remainingTime - (float)difference.TotalSeconds);
            //PlayerPrefs.DeleteKey("TimeOnExit");
            //PlayerPrefs.DeleteKey("sysString");
        }
    }

    // Update is called once per frame
    void Update()
    {
        if (Gameroot.isFull)
        {
            GetComponent<Text>().text = "Full";
            count = 0;
            timer.refresh();
        }
        else
        {
            //Debug.Log("deltatime ************************"+ secondstime);
            timer.countDown();
            if (timer.isFinished())
            {
                timer = new Timer(waitTime);
                timer.refresh();
                gameRoot.AddEnergy(1);
            }
            UpdateClock();
        }
    }

    void UpdateClock()
    {
        int seconds = ((int)timer.timeLeft) % 60;
        int minutes = (int)(timer.timeLeft / 60);
        GetComponent<Text>().text = minutes.ToString() + ":" + seconds.ToString("00");
    }

    void OnApplicationQuit()
    {
        PlayerPrefs.SetFloat("TimeOnExit", timer.timeLeft);
        var today = DateTime.Now;
        PlayerPrefs.SetString("sysString", today.ToBinary().ToString());
        PlayerPrefs.Save();
    }
}

请帮助上面代码中的错误或缺失。

答案

我认为您可以使用OnApplicationPauseOnApplicationPause

[对于OnApplicationFocusOnApplicationFocus,也要做与OnApplicationQuit中相同的操作>

并且与OnApplicationPause(true)OnApplicationFocus(false)Start之类的操作相同

OnApplicationPause(false)

以上是关于[Unity计时器倒计时,当应用杀死Android时不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Swift:当应用程序进入后台时启动另一个计时器

当应用程序在 iPhone 上退出活动时,计时器是不是会自动禁用?

Android:当活动死亡时,计时器被孤立

在 Unity 中使用按钮重置计时器

Unity 中的光线投射和计时器问题

如何从 Android 应用程序与服务器同步倒数计时器