【时间限制】修改Start()函数里的minTime和maxTime时间即可。限制时间也可精确到秒,比如:
DateTime minTime = Convert.ToDateTime("2019-4-23 12:22:05");
【次数限制】SetPlayUseNumber()为限制次数方法,修改键值名就可以重新计算("UseTime")
本脚本是限制时间和次数的搭配使用,可自行修改。
//***************************************************
//作用:限制使用时间或次数
//用法:时间限制,修改Start()函数里的方法即可
//SetPlayUseNumber()为限制次数方法,修改键值名("UseTime")就可以重新计算
//
//***************************************************
using Microsoft.Win32;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SetUserTime : MonoBehaviour {
//注册名,可自行修改
string UseTime = "UseTime";
//试用次数
int num = 500;
//到期提示文字(提示面板)
public Button Btn_expire;
// Use this for initialization
void Start () {
//===(比如从3月1日开始计算,到4月1日结束)
//只要小于minTime时间或大于maxTime时间,将停止使用
DateTime minTime = Convert.ToDateTime("2019-3-1");
DateTime maxTime = Convert.ToDateTime("2019-4-1");
if (minTime > DateTime.Now || DateTime.Now > maxTime)
{
//===到期后,超时提示
UseTime = "到期了";
num = 0;
print("到期了");
}
//===本方法放在此处,可以实现时间和次数同时限制
SetPlayUseNumber();
//if (minTime < DateTime.Now && DateTime.Now < maxTime)
//{
// //===用于限时功能
// //在这段时间内能使用xx功能
//}
}
/// <summary>
/// 设置用户使用次数
/// </summary>
void SetPlayUseNumber()
{
RegistryKey RootKey, RegKey;
//项名为:HKEY_CURRENT_USER\Software
RootKey = Registry.CurrentUser.OpenSubKey("SOFTWARE", true);
//打开子项:HKEY_CURRENT_USER\Software\MyRegDataApp
if ((RegKey = RootKey.OpenSubKey("MyProjectToControlUseTime", true)) == null)
{
RootKey.CreateSubKey("MyProjectToControlUseTime"); //不存在,则创建子项
RegKey = RootKey.OpenSubKey("MyProjectToControlUseTime", true);
RegKey.SetValue(UseTime, (object)num);//创建键值,存储可使用次数
print("实例化");
return;
}
try
{
object usetime = RegKey.GetValue(UseTime);//读取键值,可使用次数
print("还可以使用:" + usetime + "次");
int newtime = int.Parse(usetime.ToString()) - 1;//可使用次数减1
if (newtime < 0)
{
//到期退出程序
RegKey.SetValue(UseTime, (object)newtime);
Btn_expire.gameObject.SetActive(true);
//Btn_expire.gameObject.transform.GetChild(0).GetComponent<Text>().text="试用已到期,请联系管理员";
Invoke("OnQuit", 3);//延时退出
}
else
{
RegKey.SetValue(UseTime, (object)newtime); //更新键值,可使用次数减1
//Btn_expire.gameObject.SetActive(false);
}
}
catch
{
RegKey.SetValue(UseTime, (object)num);
print("首次进入,更新使用次数");
}
}
private void OnQuit()
{
Application.Quit();
}
}
====================================================
扩展添加:通过修改xml配置文件来改变限制的时间。方便已停手项目需更改试用期时间,而反复打包的问题。
做法:复制一个xml文件并改名为officeAll.xml,然后在里面增加一行<serverToTime>2020-12-31</serverToTime>,再添加以下代码到SetUserTime脚本中,并且把serverToTime作为获取到的最终限制时间赋给maxTime。
void Start(){
//serverToTime 通过从配置文件中读取限时操作
string path_xml = System.Environment.CurrentDirectory + @"\ComputeBook\officeAll.xml";
string serverToTime;
if (System.IO.File.Exists(path_xml))
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(path_xml);
//在配置文件中第888行为实际有效时间,其余为迷惑性文件
serverToTime = xmldoc.GetElementsByTagName("ServerToTime")[0].ChildNodes[0].InnerText;
}
else
{
serverToTime = "2020-12-31";
}
//...
DateTime minTime = Convert.ToDateTime("2019-3-1");
DateTime maxTime = Convert.ToDateTime(serverToTime );
//...
//...
}