当我们需要在Unity客户端做一个限制功能,比如按钮 (最好是发送验证码按钮)要求每天只能点击三次,等到第二天又有三次机会,这个过程不涉及到服务端消息,只涉及到本地存储,以下是我的解决方案:
直接上代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
|
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UniRx; using System; using System.IO; using System.Text; using System.Globalization; public class RegisterPanel : MonoBehaviour { private LoginUIPanel mLoginUIPanel; StreamWriter writer; StreamReader reader; //本地存储手机号 private string set_phonenum; //同一个手机号码使用次数 private int useNum=1; FileInfo file; private Button btn_GetMsgCode; /**倒计时 */ private Text txt_CountDownTimer; } private void Awake() { //获取验证码按钮 btn_GetMsgCode = input_MsgCode.transform.Find( "Btn_GetVerficationCode" ).GetComponent<Button>(); btn_GetMsgCode.onClick.AddListener(OnGetMsgCodeClick); txt_CountDownTimer = btn_GetMsgCode.transform.Find( "Text" ).GetComponent<Text>(); } private void OnEnable() { ResetGetMsgCode(); } /** * 获取验证码 */ private void OnGetMsgCodeClick() { if (!mLoginUIPanel.CheckGetMsgCode(input_Account.text)) { Debug.Log( "没有输入" ); return ; } set_phonenum = input_Account.text.ToString(); if (Limit()) { Debug.Log( "返回true" ); return ; } else { int timer = 60; intervalStream = Observable.Interval(TimeSpan.FromSeconds(1)) .Where(value => { return timer > 1; }) .SubscribeToText(txt_CountDownTimer, value => { btn_GetMsgCode.interactable = false ; return (timer--).ToString() + "秒" ; }); //.AddTo(this); //绑定生命周期 timeStream = Observable.Timer(TimeSpan.FromSeconds(60)) .SubscribeToText(txt_CountDownTimer, _ => { btn_GetMsgCode.interactable = true ; return "获取验证码" ; }); //.AddTo(this); } } private bool Limit() { if (PlayerPrefs.HasKey(set_phonenum)) { mLoginUIPanel.ShowToast( "号码已经被注册过!" ); return true ; } PlayerPrefs.SetString(set_phonenum, set_phonenum); //Application.streamingAssetsPath //获取当前时间天数 DateTime now = DateTime.Now; DateTimeOffset nowtimesss = DateTimeOffset.Now; string nowtime = now.Day.ToString(); string filenames = Application.dataPath+ "/num.txt" ; //写入当前次数 //第一次创建文件 FileInfo file = new FileInfo(filenames); if (!file.Exists) { file.CreateText().Close(); file.CreationTimeUtc = nowtimesss.UtcDateTime; Debug.Log( "第一次创建" + file.CreationTimeUtc); string bb = file.CreationTime.ToString(); char [] ss = new char [] { '/' }; string [] nnn = bb.Split(ss); Debug.Log(nnn[1]); PlayerPrefs.SetString( "FileTime" , nnn[1]); PlayerPrefs.SetInt( "i" , 0); } if (Convert.ToInt32(nowtime)!=(Convert.ToInt32(PlayerPrefs.GetString( "FileTime" )))) { //刷新次数 Debug.Log( "刷新" ); FileStream stream = File.Open(filenames, FileMode.OpenOrCreate, FileAccess.Write); stream.Seek(0, SeekOrigin.Begin); stream.SetLength(0); stream.Close(); //重置次数和时间 PlayerPrefs.SetInt( "i" , 0); PlayerPrefs.SetString( "FileTime" , nowtime); } //再判断次数 //如果是当天 if ((Convert.ToInt32(PlayerPrefs.GetString( "FileTime" )))== Convert.ToInt32(nowtime)) { Debug.Log( "执行" ); if (PlayerPrefs.GetInt( "i" ) > 2) { Debug.Log( "次数已达上限" ); mLoginUIPanel.ShowToast( "次数已达上限,请明天再来!" ); return true ; } WriteIntoTxt(useNum, filenames, file); //读取本地数据 ReadOutTxt(filenames); //排序 Allmytxt.Sort(); //对当前号码取最大值存入 PlayerPrefs.SetInt( "i" , Allmytxt[Allmytxt.Count - 1]); useNum++; int a = 3 - Allmytxt[Allmytxt.Count - 1]; mLoginUIPanel.ShowToast( "今天还剩下" + a+ "次注册机会" ); Debug.Log(PlayerPrefs.GetInt( "i" )); // Debug.Log("当前文件日期" + Convert.ToInt32(PlayerPrefs.GetString("FileTime"))); //先判断时间 return false ; } return false ; } /** * reset重置倒计时· */ public void ResetGetMsgCode() { btn_GetMsgCode.interactable = true ; txt_CountDownTimer.text = "获取验证码" ; } //把所有的数据写入文本中 public void WriteIntoTxt( int message, string filename,FileInfo file) { // FileInfo file = new FileInfo(filename); //最后一次修改日期并存储 if (!file.Exists) { writer = file.CreateText(); } else { writer = file.AppendText(); } writer.WriteLine(message); writer.Flush(); writer.Dispose(); writer.Close(); string bb = file.LastAccessTime.ToString(); char [] ss = new char [] { '/' }; string [] nnn = bb.Split(ss); Debug.Log(nnn[1]); PlayerPrefs.SetString( "FileTime" , nnn[1]); } //读取次数 存储到列表中 public void ReadOutTxt( string filename) { Allmytxt.Clear(); reader = new StreamReader(filename, Encoding.UTF8); string text; int line = 0; while ((text = reader.ReadLine()) != null ) { ++line; // Allmytxt.Add(int.Parse(text)); } //利用文本的行数来判断次数 Allmytxt.Add(line); Debug.Log(line); reader.Dispose(); reader.Close(); } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_36907428/article/details/97413556