背景
感慨下,想法是容易的做也是容易的。难的是坚持,贵在坚持吧。突然发现好一段时间没写了。
项目中遇到的问题
网络游戏一般到有倒计时功能,无论是否修改时间都不会导致倒计时混乱。
上代码
using UnityEngine;
using System.Collections;
using System;
public class SyncTime : MonoBehaviour
{
public static DateTime UtcNow { get { return DateTime.UtcNow.AddSeconds(DeltaTime); } }
//public static DateTime Now { get { return DateTime.Now.AddSeconds(DeltaTime); } }
private static double DeltaTime = 0;
private static double ServerTime = 0;
private static double ValidStartGameTime = 0;
//同步服务器时间
public static void Sync(long time)
{
ValidStartGameTime = Time.realtimeSinceStartup;
DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Unspecified).AddSeconds(time);
DeltaTime = (dt - DateTime.UtcNow).TotalSeconds;
ServerTime = time;
}
//剩余时间
public static TimeSpan GetLeftTime(long validTime)
{
TimeSpan ts = (new DateTime(1970, 1, 1).AddSeconds((double)validTime)).Subtract(SyncTime.UtcNow);
return ts;
}
//当前服务器时间
public static DateTime GetSystemTime()
{
DateTime dateTime = (new DateTime(1970, 1, 1).AddSeconds((double)ServerTime)).AddSeconds((double)(Time.realtimeSinceStartup - ValidStartGameTime));
return dateTime;
}
}
调用例子:登陆游戏成功同步服务器时间。然后调用GetSystemTime(validTime 是指某一个具体某一个点的时间)就可以了