以6分钟恢复1体力 满体力是100为例子
注释: (int) SaveData._instance.PS为专门存储数据的类里边的体力
存储时间的对象TIME类
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TIME
{
public int year { get; set; }
public int month { get; set; }
public int day { get; set; }
public int hour { get; set; }
public int minute { get; set; }
public int second { get; set; }
public TIME(int year, int month, int day, int hour, int minute, int second)
{
this.year = year;
this.month = month;
this.day = day;
this.hour = hour;
this.minute = minute;
this.second = second;
}
}
游戏体力的计算的逻辑 随便挂载一个空物体上
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class code : MonoBehaviour
{
//游戏里保存的时间
TIME saveTime;
//现在的时间
TIME nowTime;
// private int SP;
public Text waitRecoverTimeText;//主界面体力倒计时的text
private void Awake()
{
nowTime = new TIME(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);
saveTime = nowTime;//先构造出来两个时间的实例对象 然后在改变
GetTheTime();//改变saveTime
}
private void Start()
{
StartCoroutine(ChangeTimeAndSP());//开始调用携程
}
private void Update()
{
if (SaveData._instance.PS >= 100) { print("SP"+ SaveData._instance.PS); print("隐藏"); waitRecoverTimeText.gameObject.SetActive(false); }//根据提示是否满控制倒计时text是否显示的方法
else if (SaveData._instance.PS < 100) { print("显示"); waitRecoverTimeText.gameObject.SetActive(true); }
}
void SaveTheTime()//存储时间的方法 把现在的时间存储进去 todo 玩家进入关卡之后调用
{
PlayerPrefs.SetInt("Year", nowTime.year);
PlayerPrefs.SetInt("Month", nowTime.month);
PlayerPrefs.SetInt("Day", nowTime.day );
PlayerPrefs.SetInt("Hour", nowTime.hour);
PlayerPrefs.SetInt("Minute", nowTime.minute);
PlayerPrefs.SetInt("Second", nowTime.second );
}
void GetTheTime()//读取时间的方法 获取到上一次体力开始消耗时候的时间
{
// print( "是否有key:" +PlayerPrefs.HasKey("Year") );
saveTime.year = PlayerPrefs.GetInt("Year", DateTime.Now.Year);
saveTime.month = PlayerPrefs.GetInt("Month", DateTime.Now.Month);
saveTime.day = PlayerPrefs.GetInt("Day", DateTime.Now.Day);
saveTime.hour = PlayerPrefs.GetInt("Hour", DateTime.Now.Hour);
saveTime.minute = PlayerPrefs.GetInt("Minute", DateTime.Now.Minute);
saveTime.second = PlayerPrefs.GetInt("Second", DateTime.Now.Second);
print("成功获取到存储的时间 为" + saveTime.year + "年" + saveTime.month + "月" + saveTime.day + "日" + saveTime.hour + "时" + saveTime.minute + "分" + saveTime.second + "秒");
}
IEnumerator ChangeTimeAndSP()
{
//1 获取到现在的时间
nowTime = new TIME(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);
//1.1 判断是否目前时间比存储的时间 日期靠后
bool isRun = false;
if (nowTime.year > saveTime.year)//如果年数靠后的话 就不在进行判断了 直接去执行下边的逻辑了
{
{ isRun = true; goto mylable; }
}
if (nowTime.month > saveTime.month )//月
{
{ isRun = true; goto mylable; }
}
if (nowTime.day > saveTime.day )//日
{
{ isRun = true; goto mylable; }
}
if (nowTime.hour > saveTime.hour )//时
{
{ isRun = true; goto mylable; }
}
if (nowTime.minute > saveTime.minute )//分
{
{ isRun = true; goto mylable; }
}
if (nowTime.second > saveTime.second )//秒
{
{ isRun = true;}
}
mylable:
int theSecond = -1;//存储恢复体力需要的秒数
if (isRun == true)//如果现在的时间确定比已经存储的时间靠后 进行正常操作
{
//2 获取到 现在的时间与存储器里边的时间 相差的秒的数量
int secondDiffence = nowTime.second - saveTime.second;
int minuteDiffence = nowTime.minute - saveTime.minute;
int hourDiffence = nowTime.hour - saveTime.hour;
int dayDiffence = nowTime.day - saveTime.day;
int monthDiffence = nowTime.month - saveTime.month;
int yearDiffence = nowTime.year - saveTime.year;
int theSecondLerp = secondDiffence + minuteDiffence * 60 + hourDiffence * 60 * 60 + dayDiffence * 60 * 60 * 24 + monthDiffence * 60 * 60 * 24 * 30+ yearDiffence*12 * 60 * 60 * 24 * 30;
//3如果体力不满的时候
if (SaveData._instance.PS < 100)//如果体力不满的话
{
waitRecoverTimeText.gameObject.SetActive(true); //显示text
for (; theSecondLerp >= 300; theSecondLerp -= 300)//如果秒数不够 跳出循环 每隔300秒加1体力
{
SaveData._instance.PS++;
SaveTheTime();
GetTheTime();
if (SaveData._instance.PS >= 100) { break; } //如果体力满了 跳出循环
}
}
else { SaveTheTime(); }
theSecond = theSecondLerp;
}
else//是玩家调整了系统日期 重新把当前世界存储为savetime
{
SaveTheTime();
GetTheTime();
}
yield return new WaitForSeconds(1.0f);
ChangeMainScenceText(theSecond);//更新倒计时text的方法
StartCoroutine(ChangeTimeAndSP());//递归携程
}
void ChangeMainScenceText(int second)//更新主页的倒计时text 的方法
{
if (second <= 0) { return; }//安全校验
int minuteCount = 0;//倒计时里边的分钟的数字
int secondCount;//倒计时里边的秒钟的数字
for (; second>=60; second-=60)//通过循环获取到剩余的分钟数量
{
minuteCount++;
}
secondCount = second;
//text的显示:
if (secondCount >50) { waitRecoverTimeText.text = (5- minuteCount).ToString() + ":0" + (60- secondCount).ToString(); }
else { waitRecoverTimeText.text = (5 - minuteCount).ToString() + ":" + (60 - secondCount).ToString(); }
}
}