【Unity3D日常开发】(二十)Unity3D实现“使用次数限制以及时间限制功能”

举报
恬静的小魔龙 发表于 2021/10/24 18:25:24 2021/10/24
【摘要】 推荐阅读CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客QQ群:1040082875 一、前言在使用Unity进行软件开发的时候,会遇到实现程序的使用次数限制,以及使用的时间区间限制,说白就是保护程序的一种措施。我们用的方法是,新建注册表,增加键值对,修改键值,完成对程序的使用权限控制。当然还有更加安全的方法,包括获取硬盘编号,还有电子狗加密等等,这些就以后讨论。【...

推荐阅读

一、前言

在使用Unity进行软件开发的时候,会遇到实现程序的使用次数限制,以及使用的时间区间限制,说白就是保护程序的一种措施。我们用的方法是,新建注册表,增加键值对,修改键值,完成对程序的使用权限控制。当然还有更加安全的方法,包括获取硬盘编号,还有电子狗加密等等,这些就以后讨论。

二、参考文章

Unity 限时使用 限制试用时间和使用次数
https://blog.csdn.net/zjh_368/article/details/87920383
作者:紫阳_368

三、时间限制

修改Start()函数里的minTimemaxTime时间即可。限制时间也可精确到秒,比如:
DateTime minTime = Convert.ToDateTime(“2019-4-23 12:22:05”);

代码:

using System;
using UnityEngine;

public class SetUserTime : MonoBehaviour
{
    //用户是否超过使用日期
    bool Islate = false;

    // Use this for initialization
    void Start()
    {
        //===(比如8月1日开始计算,到8月8日结束)
        //小于minTime 时间或者大于maxTime时间 ,将不可使用
        DateTime minTime = Convert.ToDateTime("2019-8-1 15:29:00");
        DateTime maxTime = Convert.ToDateTime("2019-8-8 15:29:00");
        if (minTime > DateTime.Now || DateTime.Now > maxTime)
        {
            //不在使用时间内,会直接退出程序
            Islate = true;
        }
        SetPlayUseNumber();
    }

    /// <summary>
    /// 设置用户使用次数
    /// </summary>
    void SetPlayUseNumber()
    {
        //异常捕捉,如果发生异常,比如闪退,限制改为false
        try
        {
            //限制使用时间,如果不在这个区间内,直接退出程序
            if (Islate)
            {
                Invoke("OnExit", 2);//延时退出,可在退出前显示提示消息
            }
        }
        catch
        {
            Islate = false;
        }
    }

    //出处程序
    private void OnExit()
    {
        Application.Quit();
    }
}

四、次数限制

SetPlayUseNumber()为限制次数方法,修改键值名就可以重新计算(“UseTime”)

本脚本是限制时间和次数的搭配使用,可自行修改。

脚本:

using Microsoft.Win32;
using UnityEngine;

public class SetUserTime1 : MonoBehaviour
{
    //最大使用次数
    int MaxUsageCount = 3;

    void Start()
    {
        SetPlayUseNumber();
    }

    /// <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("TestToControlUseTime", true)) == null)
        {
            RootKey.CreateSubKey("TestToControlUseTime");               //不存在,则创建子项
            RegKey = RootKey.OpenSubKey("TestToControlUseTime", true);  //打开键值
            RegKey.SetValue("UseTime7", (object)MaxUsageCount);         //创建键值,存储最大可使用次数
            return;
        }
        //异常捕捉,如果出现程序异常,比如闪退,次数更新为开始设置的最大使用次数
        try
        {
            object usetime = RegKey.GetValue("UseTime7");        //读取键值,可使用次数
            print("还可以使用:" + usetime + "次");
            //使用次数减1
            int newtime = int.Parse(usetime.ToString()) - 1;
            if (newtime < 0)
            {
                //到期退出程序
                RegKey.SetValue("UseTime7", (object)newtime);
                Invoke("OnExit", 2);//延时退出,可在退出前显示提示消息
            }
            else
            {
                RegKey.SetValue("UseTime7", (object)newtime);    //更新键值,可使用次数减1
            }
        }
        catch
        {
            RegKey.SetValue("UseTime7", (object)MaxUsageCount);
            print("更新使用次数");
        }
    }

    /// <summary>
    /// 退出程序
    /// </summary>
    private void OnExit()
    {
        Application.Quit();
    }
}

五、同时控制时间和次数

using Microsoft.Win32;
using System;
using UnityEngine;

public class SetUserTime2 : MonoBehaviour
{
    //最大使用次数
    int MaxUsageCount = 3;
    //用户是否超过使用日期
    bool Islate = false;

    void Start()
    {
        //===(比如8月1日开始计算,到8月8日结束)
        //小于minTime 时间或者大于maxTime时间 ,将不可使用
        DateTime minTime = Convert.ToDateTime("2019-8-1 15:29:00");
        DateTime maxTime = Convert.ToDateTime("2019-8-8 15:29:00");
        if (minTime > DateTime.Now || DateTime.Now > maxTime)
        {
            //不在使用时间内,会直接退出程序
            Islate = true;
        }
        SetPlayUseNumber();
    }

    /// <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("TestToControlUseTime", true)) == null)
        {
            RootKey.CreateSubKey("TestToControlUseTime");               //不存在,则创建子项
            RegKey = RootKey.OpenSubKey("TestToControlUseTime", true);  //打开键值
            RegKey.SetValue("UseTime7", (object)MaxUsageCount);         //创建键值,存储最大可使用次数
            return;
        }
        //异常捕捉,如果出现程序异常,比如闪退,次数更新为开始设置的最大使用次数
        try
        {
            object usetime = RegKey.GetValue("UseTime7");        //读取键值,可使用次数
            print("还可以使用:" + usetime + "次");
            //使用次数减1
            int newtime = int.Parse(usetime.ToString()) - 1;
            if (newtime < 0 || Islate)
            {
                //到期退出程序
                RegKey.SetValue("UseTime7", (object)newtime);
                Invoke("OnExit", 2);//延时退出,可在退出前显示提示消息
            }
            else
            {
                RegKey.SetValue("UseTime7", (object)newtime);    //更新键值,可使用次数减1
            }
        }
        catch
        {
            RegKey.SetValue("UseTime7", (object)MaxUsageCount);
            Islate = false;
            print("更新使用次数");
        }
    }

    /// <summary>
    /// 退出程序
    /// </summary>
    private void OnExit()
    {
        Application.Quit();
    }
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。