U3D游戏开发框架七每日刷新
目录
U3D游戏开发框架(七)——每日刷新
关键词由CSDN通过智能技术生成
一:目的
任何一款游戏都需要一个每日刷新的机制,例如每日任务
所以我们需要一个管理器统一管理每日刷新的相关操作
二:解决的问题及优点
——自定义每日几点刷新
三:使用方法
——在游戏启动的最开始创建DailyMgr实例: _ = DailyMgr.Ins
——设置常量refreshHour
——使用自己的存档管理器管理存档数据,替换获取存档和保存存档的逻辑语句:
int lastDayOfYear = PlayerPrefs.GetInt(“lastDayOfYear”, -1)
PlayerPrefs.SetInt(“lastDayOfYear”, now.DayOfYear)
四:代码实现
using System;
using UnityEngine;
/// <summary>
/// 每日刷新管理器
/// </summary>
public class DailyMgr : MonoSingleton<DailyMgr>
{
public const int RefreshHour = 5;//几点刷新
public override void Awake()
{
base.Awake();
CheckRefresh();
lastCheckTime = Time.realtimeSinceStartup;
}
private void OnApplicationPause(bool pause)
{
if (!pause)
{
CheckRefresh();
}
}
float lastCheckTime;//上一次检测的时间
private void Update()
{
//5秒检测一次
if (Time.realtimeSinceStartup - lastCheckTime > 5)
{
lastCheckTime = Time.realtimeSinceStartup;
CheckRefresh();
}
}
/// <summary>
/// 检测刷新
/// </summary>
void CheckRefresh()
{
DateTime now = DateTime.Now;
int lastDayOfYear = PlayerPrefs.GetInt("lastDayOfYear", -1);
if (now.DayOfYear != lastDayOfYear)
{
//同一年
if (now.DayOfYear > lastDayOfYear)
{
//超过一天未登陆
if (now.DayOfYear - lastDayOfYear >= 2)
{
PlayerPrefs.SetInt("lastDayOfYear", now.DayOfYear);
RefreshData();
}
//只有一天未登陆
else
{
if (now.Hour >= RefreshHour)
{
PlayerPrefs.SetInt("lastDayOfYear", now.DayOfYear);
RefreshData();
}
}
}
//跨年
else if (now.DayOfYear < lastDayOfYear)
{
int lastYear = now.Year - 1;
int lastYearTotalDays = lastYear % 4 == 0 ? 366 : 365;
//超过一天未登陆
if (lastYearTotalDays + now.DayOfYear - lastDayOfYear >= 2)
{
PlayerPrefs.SetInt("lastDayOfYear", now.DayOfYear);
RefreshData();
}
//一天未登陆并且到达刷新时间
else
{
if (now.Hour >= RefreshHour)
{
PlayerPrefs.SetInt("lastDayOfYear", now.DayOfYear);
RefreshData();
}
}
}
}
}
/// <summary>
/// 刷新(所有需要每日刷新的数据)
/// </summary>
public void RefreshData()
{
}
}