目录
1.方式一:
public int curTime = 0;
------------------------------------------------------------------------------------------------------
TimeSpan st = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0);
long aTime = Convert.ToInt64(st.TotalSeconds);
if(PlayerPrefs.GetInt("AdTime",0)==0){
StartConroutine("TimeLine");
PlayerPrefs.setInit("AdTime",(int)aTime);
}
else
{
curTime = 900 - (int)(aTime - (PlayerPrefs.GetInt("AdTime", 0)));
if (curTime > 0)
{
StartCoroutine("TimeLine");
}
}
------------------------------------------------------------------------------------------------------
IEnumerator TimeLine()
{
yield return new WaitForSeconds(1f);
curTime -= 1;
if (curTime > 0)
{
StartCoroutine("TimeLine");
}
}
----------------------------------------------------------------------------------------------------------
if (curTime > 0) {
_hour = (curTime/3600).ToString();
if ((curTime / 3600) < 10) {
_hour = "0"+_hour;
}
_min = (curTime % 3600 /60).ToString();
if ((curTime % 3600 /60) < 10)
{
_min = "0" + _min;
}
_seconds = (curTime % 3600 % 60).ToString();
if ((curTime % 3600 % 60) < 10)
{
_seconds = "0" + _seconds;
}
newUserPackage.text = string.Format("限时 {0}:{1}:{2}", _hour, _min, _seconds);
}
-----------------------------------------------------------------------------------------------------------------
重新计时
TimeSpan st = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0);
long aTime = Convert.ToInt64(st.TotalSeconds);
PlayerPrefs.SetInt("menuTime", (int)aTime);
coolTime_Menu = 900;
StartCoroutine("TimeLine");
2.方式二
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
public float upgradeTime = 60.0f; // 升级所需时间
private DateTime startTime; // 升级开始时间
void Start()
{
// 检查是否已经记录了升级开始时间,如果没有,则记录当前时间
if (!PlayerPrefs.HasKey(gameObject.name + "_upgradeStartTime"))
{
startTime = DateTime.Now;
PlayerPrefs.SetString(gameObject.name + "_upgradeStartTime", startTime.ToString());
}
else
{
string startTimeString = PlayerPrefs.GetString(gameObject.name + "_upgradeStartTime");
startTime = DateTime.Parse(startTimeString);
}
}
void Update()
{
// 检查升级是否已经完成
if (DateTime.Now - startTime >= TimeSpan.FromSeconds(upgradeTime))
{
Debug.Log("Upgrade complete!");
// 在升级完成后,删除记录的升级开始时间
PlayerPrefs.DeleteKey(gameObject.name + "_upgradeStartTime");
//Destroy(this);
}else
{
// 计算还需要升多少时间才能完成升级
TimeSpan remainingTime = TimeSpan.FromSeconds(upgradeTime) - (DateTime.Now - startTime);
Debug.Log("Upgrade remaining time: " + remainingTime.ToString());
// 计算剩余时间并显示
string remainingTimeString = string.Format("{0:D2}:{1:D2}:{2:D2}", remainingTime.Hours, remainingTime.Minutes, remainingTime.Seconds);
Debug.Log("Upgrade remaining time: " + remainingTimeString);
}
}
}
示例:
using System;
using UnityEngine;
public class CoolTime : MonoBehaviour
{
private DateTime startTime; // 升级开始时间
private string key_cool = "";
private bool coolBegin = false;
private Entity_TuZhi etz;
public string coolTime = "";
public void Init(Entity_TuZhi _etz)
{
etz = _etz;
gameObject.SetActive(true);
}
private void OnEnable()
{
CheckIsUpReady();
}
private void Update()
{
if (!coolBegin)
{
return;
}
// 检查升级是否已经完成
if (DateTime.Now - startTime >= TimeSpan.FromSeconds(etz.tz_cost_time))
{
coolBegin = false;
// 在升级完成后,删除记录的升级开始时间
PlayerPrefs.DeleteKey(key_cool);
gameObject.SetActive(false);
}
else
{
// 计算还需要升多少时间才能完成升级
TimeSpan remainingTime = TimeSpan.FromSeconds(etz.tz_cost_time) - (DateTime.Now - startTime);
coolTime = string.Format("{0:D2}:{1:D2}:{2:D2}", remainingTime.Hours, remainingTime.Minutes, remainingTime.Seconds);
}
}
public void CheckIsUpReady()
{
switch (etz.tz_fab)
{
case "tz_car3":
key_cool = "coolTime_tz3";
break;
case "tz_car4":
key_cool = "coolTime_tz4";
break;
case "tz_car5":
key_cool = "coolTime_tz5";
break;
}
// 检查是否已经记录了升级开始时间,如果没有,则记录当前时间
if (!PlayerPrefs.HasKey(key_cool))
{
startTime = DateTime.Now;
PlayerPrefs.SetString(key_cool, startTime.ToString());
}
else
{
string startTimeString = PlayerPrefs.GetString(key_cool);
startTime = DateTime.Parse(startTimeString);
}
coolBegin = true;
}
}