Unity3D实现项目限制功能(使用次数限制和时间限制)

系列文章目录

unity工具


文章目录

  • 系列文章目录
  • 前言
  • 一、时间限制
    • 1-1、代码如下:
  • 二、次数限制
    • 2-1、 在Unity项目中需要对注册表进行操作,还需要设置一下API兼容级别设置成 .NET Framework
    • 2-2、设置如下图 Player里面
    • 2-3、代码如下:
  • 三、同时控制时间和次数
  • 四、unity自带保存读取次数限制
    • 4-1、代码如下:
    • 4-2、效果
  • 总结


前言

大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
在软件开发的时候,可能会遇到程序的使用次数限制,以及时间的限制,下面就写一下这两种
方法是新建注册表,增加键值对,修改键值,完成对程序的控制


提示:以下是本篇文章正文内容,下面案例可供参考

一、时间限制

修改脚本里面的startTime和endTime即可

1-1、代码如下:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Time_Restrict : MonoBehaviour
{//用户是否超过使用日期bool Islate = false;// Use this for initializationvoid Start(){//===(比如2月1日开始计算,到2月8日结束)//小于minTime 时间或者大于maxTime时间 ,将不可使用DateTime startTime = Convert.ToDateTime("2024-2-1 16:29:00");DateTime endTime = Convert.ToDateTime("2024-2-8 16:29:00");if (startTime > DateTime.Now || DateTime.Now > endTime){//不在使用时间内,会直接退出程序Islate = true;}SetPlayTime();}/// <summary>/// 设置用户使用次数/// </summary>void SetPlayTime(){//异常捕捉,如果发生异常,比如闪退,限制改为falsetry{//限制使用时间,如果不在这个区间内,直接退出程序if (Islate){Debug.Log("超时间了");Invoke("OnExit", 2);//延时退出,可在退出前显示提示消息}}catch{Islate = false;}}//退出程序private void OnExit(){Application.Quit();}
}

但是有个小弊端,用户改了系统时间,软件就可以使用了,但也是只能在设置时间区间内使用。

二、次数限制

2-1、 在Unity项目中需要对注册表进行操作,还需要设置一下API兼容级别设置成 .NET Framework

2-2、设置如下图 Player里面

在这里插入图片描述

具体想写到哪个注册表,可以自行设置名称

2-3、代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Microsoft.Win32;
public class Frequency_Restrict : MonoBehaviour
{//最大使用次数int MaxUsageCount = 3;/// <summary>/// 如果想刷新次数,直接换一个键值名称就行了 老:UseTime1  新:UseTime2/// </summary>void Start(){SetPlayFrequency();}/// <summary>/// 设置用户使用次数/// </summary>void SetPlayFrequency(){//创建键值对RegistryKey RootKey, RegKey;//项名为:HKEY_CURRENT_USER\SoftwareRootKey = Registry.CurrentUser.OpenSubKey("SOFTWARE", true);//打开子项:HKEY_CURRENT_USER\Software\MyRegDataAppif ((RegKey = RootKey.OpenSubKey("TestToControlUseTime", true)) == null){RootKey.CreateSubKey("TestToControlUseTime");               //不存在,则创建子项RegKey = RootKey.OpenSubKey("TestToControlUseTime", true);  //打开键值RegKey.SetValue("UseTime1", (object)MaxUsageCount);         //创建键值,存储最大可使用次数return;}//异常捕捉,如果出现程序异常,比如闪退,次数更新为开始设置的最大使用次数try{object usetime = RegKey.GetValue("UseTime1");        //读取键值,可使用次数print("还可以使用:" + usetime + "次");//使用次数减1int newtime = int.Parse(usetime.ToString()) - 1;if (newtime < 0){//到期退出程序RegKey.SetValue("UseTime1", (object)newtime);Invoke("OnExit", 2);//延时退出,可在退出前显示提示消息}else{RegKey.SetValue("UseTime1", (object)newtime);    //更新键值,可使用次数减1}}catch{RegKey.SetValue("UseTime1", (object)MaxUsageCount);print("更新使用次数");}}/// <summary>/// 退出程序/// </summary>private void OnExit(){Application.Quit();}
}

注册表这种比较保险一点,但是也是可以破解的,注册表好像重装系统就没有了

三、同时控制时间和次数

1.两种放一起实现效果更好用

代码如下:

using Microsoft.Win32;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Merge_Controller : MonoBehaviour
{//用户是否超过使用日期bool Islate = false;//最大使用次数int MaxUsageCount = 3;// Use this for initializationvoid Start(){//===(比如2月1日开始计算,到2月8日结束)//小于minTime 时间或者大于maxTime时间 ,将不可使用DateTime startTime = Convert.ToDateTime("2024-2-1 16:29:00");DateTime endTime = Convert.ToDateTime("2024-2-8 16:29:00");if (startTime > DateTime.Now || DateTime.Now > endTime){//不在使用时间内,会直接退出程序Islate = true;}SetPlaymerge();}void SetPlaymerge(){//创建键值对RegistryKey RootKey, RegKey;//项名为:HKEY_CURRENT_USER\SoftwareRootKey = Registry.CurrentUser.OpenSubKey("SOFTWARE", true);//打开子项:HKEY_CURRENT_USER\Software\MyRegDataAppif ((RegKey = RootKey.OpenSubKey("TestToControlUseTime", true)) == null){RootKey.CreateSubKey("TestToControlUseTime");               //不存在,则创建子项RegKey = RootKey.OpenSubKey("TestToControlUseTime", true);  //打开键值RegKey.SetValue("UseTime1", (object)MaxUsageCount);         //创建键值,存储最大可使用次数return;}//异常捕捉,如果出现程序异常,比如闪退,次数更新为开始设置的最大使用次数try{object usetime = RegKey.GetValue("UseTime1");        //读取键值,可使用次数print("还可以使用:" + usetime + "次");//使用次数减1int newtime = int.Parse(usetime.ToString()) - 1;if (newtime < 0|| Islate){//到期退出程序RegKey.SetValue("UseTime1", (object)newtime);Invoke("OnExit", 2);//延时退出,可在退出前显示提示消息}else{RegKey.SetValue("UseTime1", (object)newtime);    //更新键值,可使用次数减1}}catch{RegKey.SetValue("UseTime1", (object)MaxUsageCount);print("更新使用次数");}}/// <summary>/// 退出程序/// </summary>private void OnExit(){Application.Quit();}
}

四、unity自带保存读取次数限制

1、用的是unity自带的保存和读取

4-1、代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class UnitySetMassage : MonoBehaviour
{private int intflage = 3;private  int intisbool = 0;// Start is called before the first frame updatevoid Start(){//PlayerPrefs.DeleteAll();判断有没有这个键值if (PlayerPrefs.HasKey("csxz")){intisbool = PlayerPrefs.GetInt("csxz");Debug.Log("还有几次:" + intisbool);if (intisbool <=0){Debug.Log("结束");Application.Quit();}}else{PlayerPrefs.SetInt("csxz", intflage);intisbool = intflage;}}//退出程序时保存private void OnApplicationQuit(){if (PlayerPrefs.HasKey("csxz")){intisbool--;PlayerPrefs.SetInt("csxz", intisbool);Debug.Log("还剩几次:" + intisbool);}}// Update is called once per framevoid Update(){}
}

4-2、效果

打印效果就不录视频了,感兴趣的话请自行测试一下吧,我把测试的打印出来
在这里插入图片描述

总结

以上就是讲了两种限制方法
不定时更新Unity开发技巧,觉得有用记得一键三连哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/669807.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

13. Threejs案例-绘制3D文字

13. Threejs案例-绘制3D文字 实现效果 知识点 FontLoader 一个用于加载 JSON 格式的字体的类。 返回 font&#xff0c;返回值是表示字体的 Shape 类型的数组。 其内部使用 FileLoader 来加载文件。 构造器 FontLoader( manager : LoadingManager ) 参数类型描述managerLo…

简单的TcpServer(英译中)

目录 一、TCP socket API 详解1.1 socket()1.2 bind()1.3 listen()1.4 accept()1.5 connect 二、TcpServer&#xff08;英译中&#xff09;2.1 TcpServer.hpp2.2 TcpClient.cc2.3 Task.hpp2.4 Thread.hpp2.5 ThreadPool.hpp2.6 makefile2.7 Main.cc2.8 log.hpp2.9 Init.hpp2.10…

瑞萨RA6M3开发实践指南-UART实践

1.背景说明 本文是参考瑞萨RA6M3开发实践指南文章教程&#xff0c;基于瑞萨HMI-Board BSP :1.1.1 版本 RT-Thread 5.0.1 版本操作步骤进行记录&#xff0c;整理成的文档。 1.1 本章内容 使用RT-Thread Studio创建开发板的程序&#xff0c;编写UART的程序&#xff0c;实现串口…

Springboot+vue的企业财务管理系统(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的企业财务管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的企业财务管理系统&#xff0c;采用M&#xff08;model&…

【Java安全】ysoserial-URLDNS链分析

前言 Java安全中经常会提到反序列化&#xff0c;一个将Java对象转换为字节序列传输&#xff08;或保存&#xff09;并在接收字节序列后反序列化为Java对象的机制&#xff0c;在传输&#xff08;或保存&#xff09;的过程中&#xff0c;恶意攻击者能够将传输的字节序列替换为恶…

第二篇:MySQL安装与配置(基于小皮面板(phpstudy))

在第一篇中介绍了数据库的相关概念&#xff0c;了解到SQL是用来操作数据库管理系统的语言&#xff0c;因此要学习数据库技术&#xff0c;数据库管理系统的配备是必不可少的&#xff01; 并且出于流行性与实惠性的双考量而选择MySQL这款数据库管理系统软件 一&#xff0c;工具推…

JVM工作原理与实战(三十六):GraalVM虚拟机

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、GraalVM介绍 二、GraalVM的两种运行模式 三、GraalVM应用场景 1.GraalVM存在的问题 2.GraalVM企业级应用-Serverless架构 3.Serverless架构-函数计算 4.Serverless架构-Serve…

zabbix配置自动发现

1.准备一台新的主机&#xff0c;安装相关软件包。 [rootsishi ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm [rootsishi ~]# yum -y install zabbix-agent2.修改zabbix-agent端的配置文件 [rootsishi ~]# vim /etc/z…

TS项目实战二:网页计算器

使用ts实现网页计算器工具&#xff0c;实现计算器相关功能&#xff0c;使用tsify进行项目编译&#xff0c;引入Browserify实现web界面中直接使用模块加载服务。   源码下载&#xff1a;点击下载 讲解视频 TS实战项目四&#xff1a;计算器项目创建 TS实战项目五&#xff1a;B…

当AGI遇到人形机器人

为什么人类对人形机器人抱有执念 人形机器人是一种模仿人类外形和行为的机器人&#xff0c;它的研究和开发有着多方面的目的和意义。 人形机器人可以更好地适应人类的环境和工具。人类的生活和工作空间都是根据人的尺寸和动作来设计的&#xff0c;例如门、楼梯、桌椅、开关等…

【数据分享】1929-2023年全球站点的逐月平均能见度(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 之前我们分享过1929-2023年全球气象站点的逐月平均气温数据、逐月最高气温数据…

【征稿已开启】第五大数据、人工智能与软件工程国际研讨会(ICBASE 2024)

第五大数据、人工智能与软件工程国际研讨会&#xff08;ICBASE 2024&#xff09; 2024 5th International Conference on Big Data & Artificial Intelligence & Software Engineering 2024年09月20-22日 | 中国温州 第五届大数据、人工智能与软件工程国际研讨会&…

年假作业4

AACBB DACBDD DACBC DBDCA ADBAD #include <stdio.h> #include <string.h> int main(int argc, const char *argv[]) { int i,j; int temp; int arr[10]; for( i0;i<10;i) { printf("请输入第%d个数",i1); …

【lvgl】esp32移植lvgl

文章目录 一、环境二、抓取代码三、切换分支四、配置芯片信息五、编译异常问题1: 未定义宽高问题2: 修改接口问题3: lv_mem_size问题4&#xff1a;头文件命名打开配置问题5&#xff1a;缺少font12 六、配置引脚问题6&#xff1a;显示花屏&#xff0c;字符不清 七、测试demo八、…

vscode连接ssh报错

关于vscode更新版本至1.86后&#xff0c;导致无法连接服务器问题的记录 原因&#xff1a;vscode1.86更新了对glibc的要求&#xff0c;需要最低2.28版本&#xff0c;导致各种旧版本的linux发行版&#xff08;比如最常见的centos 7&#xff09;都无法用remote-ssh来连接了&#…

Windows11安装运行Linux(Ubuntu)

一、安装windows支持 输入windows打开界面 选择虚拟机监控程序平台、适用于linux的子系统、虚拟机平台 在 Windows 系统中&#xff0c;"虚拟机平台"和"虚拟机监控程序平台"是两个与虚拟化相关的功能&#xff0c;但它们各自有着不同的作用和用途。 虚拟机…

【ArcGIS微课1000例】0101:删除冗余节点或折点

文章目录 一、实验描述二、实验数据三、实验过程1. 手动删除2. 简化线工具四、注意事项一、实验描述 矢量数据获取通常来源于手动或者ArcScan自动采集,其基本存储方式就是记录每个要素的点坐标,如点要素就是一个坐标、线要素由多个点要素连接形成。当某段线要素被过多的节点…

thinkphp数据批量提交(群发消息)

<form id="edit-form" class="form-horizontal" role="form" data-toggle<

LeetCode、1137. 第 N 个泰波那契数【简单,动态规划】

文章目录 前言LeetCode、1137. 第 N 个泰波那契数【简单&#xff0c;动态规划】题目与分类思路一维动态规划 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术…

2024/2/5总结

微信小程序 监听对象中所有属性的变化 如果某个对象中需要被监听的属性太多&#xff0c;为了方便&#xff0c;可以使用 通配符 ** 来监听 对象中所有属性的变化 什么是纯数字字段 概念&#xff1a;纯数字字段指的是那些不用于界面渲染的 data 字段。 好处&#xff1a;提升界面…