Unity通过本地时间/网络时间对软件进行限制使用

这篇博客介绍了如何在Unity中获取网络时间戳,并根据时间判断启用特定游戏对象。同时,它还展示了如何检测本地互联网连接状态,包括调制解调器、网卡和代理服务器上网方式。此外,还包含了从Web获取时间戳和转换为DateTime对象的方法。
摘要由CSDN通过智能技术生成

 public class TimeLimited : MonoBehaviour
    {
        public GameObject SYQ,LWTS;

        public void Start()
        {
            //网络时间
            #region 获取时间戳
            string str = GetWebClient("http://www.hko.gov.hk/cgi-bin/gts/time5a.pr?a=2");
            //string str = GetTimeStamp();   // 验证时间戳该有的长度
            //Console.WriteLine(str);   
            string timeStamp = str.Split('=')[1].Substring(0, 10);  //网页获取的数据长度超了,所以要裁剪
                                                                    //Console.WriteLine(timeStamp);

            DateTime datetime = GetTime(timeStamp);

            Debug.Log((int)datetime.Year + "年" + (int)datetime.Month + "月" + (int)datetime.Day + "日");//输出时间
            if ((int)datetime.Year > 2020&& (int)datetime.Month > 11&& (int)datetime.Day > 15) //判断是否大于2021年
            {
                Debug.Log(datetime + "123456789");
                transform.GetComponent<CameraController>().enabled = false;
                SYQ.SetActive(true);
            }
            #endregion
        }

        void Update()
        {
            //本地时间
            if (System.DateTime.Today.Year > 2020 && System.DateTime.Today.Month > 11 && System.DateTime.Today.Day > 15)//限制使用日期2021.10.2日
            {
                SYQ.SetActive(true);
                transform.GetComponent<CameraController>().enabled = false;
                Debug.Log(1234);
            }

            IsConnectedInternet();
        }

        [DllImport("winInet.dll")]                                                            //引用外部库
        private static extern bool InternetGetConnectedState(ref int dwFlag, int dwReserved); //库中函数

        #region 判断本地的连接状态
        private bool IsConnectedInternet()
        {
            int dwFlag = new int();
            if (!InternetGetConnectedState(ref dwFlag, 0))
            {
                Debug.Log("当前没有联网,请您先联网后再进行操作!");
                LWTS.gameObject.SetActive(true);

                if ((dwFlag & 0x14) == 0) return false;
                Debug.LogWarning("本地系统处于脱机模式。");
                return false;
            }
            else
            {
                if ((dwFlag & 0x01) != 0)
                {
                    Debug.Log("调制解调器上网。");
                    LWTS.gameObject.SetActive(false);
                    return true;
                }
                else if ((dwFlag & 0x02) != 0)
                {
                    Debug.Log("网卡上网。");
                    LWTS.gameObject.SetActive(false);
                    return true;
                }
                else if ((dwFlag & 0x04) != 0)
                {
                    Debug.Log("代理服务器上网。");
                    LWTS.gameObject.SetActive(false);
                    return true;
                }
                else if ((dwFlag & 0x40) != 0)
                {
                    Debug.Log("虽然可以联网,但可能链接也可能不连接。");
                    LWTS.gameObject.SetActive(false);
                    return true;
                }
            }

            return false;
        }
        #endregion

        private static string GetWebClient(string url)
        {
            string strHTML = "";
            WebClient myWebClient = new WebClient();
            Stream myStream = myWebClient.OpenRead(url);
            StreamReader sr = new StreamReader(myStream,       System.Text.Encoding.GetEncoding("utf-8"));
            strHTML = sr.ReadToEnd();
            myStream.Close();
            return strHTML;
        }

        #region 获取时间戳,本方法只是为了测试时间戳样式
        private static string GetTimeStamp()
        {
            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            return Convert.ToInt64(ts.TotalSeconds).ToString();
        }
        #endregion

        /// <summary>
        /// 时间戳转为C#格式时间
        /// </summary>
        /// <param name="timeStamp">Unix时间戳格式</param>
        /// <returns>C#格式时间</returns>
        public static DateTime GetTime(string timeStamp)
        {
            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            long lTime = long.Parse(timeStamp + "0000000");
            TimeSpan toNow = new TimeSpan(lTime);
            return dtStart.Add(toNow);
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿浩是猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值