挂载TimeManager即可
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class TimeManager : SingletonMono<TimeManager>
{
/// <summary>
/// 初始时间戳
/// </summary>
public static int TimeStampStart;
public static int TimeStampNow { get { return TimeStampStart + (int)Time.unscaledTime; } }
private static DateTime _DateTimeNow;
public static DateTime DateTimeNow
{
get
{
return _DateTimeNow.AddSeconds(Time.unscaledTime);
}
}
//public void Init()
//{
// StartCoroutine(GetNetTime());
//}
IEnumerator Start()
{
yield return StartCoroutine(GetNetTime());
Debug.Log(DateTimeNow.ToLongTimeString());
}
IEnumerator GetNetTime()
{
WWW www = new WWW("http://www.hko.gov.hk/cgis-bin/gts/time5a.pr?a=2");
//等待服务器的响应
yield return www;
//如果出现错误
if (www.error != null)
{
//TODO 无法获取服务器时间用本地时间
_DateTimeNow = DateTime.Now;
yield break;
}
string timeStamp = www.text.Split('=')[1].Substring(0, 10);
if (!int.TryParse(timeStamp, out TimeStampStart))
{
//TODO 获取服务器时间出错用本地时间
_DateTimeNow = DateTime.Now;
yield break;
}
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
long lTime = long.Parse(timeStamp + "0000000");
TimeSpan toNow = new TimeSpan(lTime);
_DateTimeNow = dtStart.Add(toNow);
}
}
using UnityEngine;
public class SingletonMono<T> : MonoBehaviour where T : MonoBehaviour
{
private static volatile T instance;
private static object syncRoot = new Object();
public static T Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
{
instance = FindObjectOfType<T>();
if (instance == null)
{
GameObject go = new GameObject();
go.name = typeof(T).Name;
instance = go.AddComponent<T>();
DontDestroyOnLoad(go);
}
}
}
}
return instance;
}
}
}