欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Unity登錄注冊時限制發(fā)送驗證碼次數(shù)功能的解決方法

 更新時間:2020年01月01日 09:07:50   作者:尋漠瀟雨  
這篇文章主要為大家詳細(xì)介紹了Unity登錄注冊時限制發(fā)送驗證碼次數(shù)功能的解決方案,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

當(dāng)我們需要在Unity客戶端做一個限制功能,比如按鈕 (最好是發(fā)送驗證碼按鈕)要求每天只能點(diǎn)擊三次,等到第二天又有三次機(jī)會,這個過程不涉及到服務(wù)端消息,只涉及到本地存儲,以下是我的解決方案:

直接上代碼:

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;
 //本地存儲手機(jī)號
    private string set_phonenum;
 //同一個手機(jī)號碼使用次數(shù)
    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("號碼已經(jīng)被注冊過!");
        return true;
      }
      PlayerPrefs.SetString(set_phonenum, set_phonenum);
      //Application.streamingAssetsPath
 
      //獲取當(dāng)前時間天數(shù)
      DateTime now = DateTime.Now;
      DateTimeOffset nowtimesss = DateTimeOffset.Now;
      string nowtime = now.Day.ToString();
      string filenames = Application.dataPath+"/num.txt";
     
      //寫入當(dāng)前次數(shù)
      //第一次創(chuàng)建文件
      FileInfo file = new FileInfo(filenames);
      if (!file.Exists)
      {
      
        file.CreateText().Close();
        file.CreationTimeUtc = nowtimesss.UtcDateTime;
        Debug.Log("第一次創(chuàng)建" + 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"))))
      {
        //刷新次數(shù)
        Debug.Log("刷新");
        FileStream stream = File.Open(filenames, FileMode.OpenOrCreate, FileAccess.Write);
        stream.Seek(0, SeekOrigin.Begin);
        stream.SetLength(0);
        stream.Close();
        //重置次數(shù)和時間
        PlayerPrefs.SetInt("i", 0);
        PlayerPrefs.SetString("FileTime", nowtime);
      }
      //再判斷次數(shù)
      //如果是當(dāng)天
      if ((Convert.ToInt32(PlayerPrefs.GetString("FileTime")))== Convert.ToInt32(nowtime))
      {
        Debug.Log("執(zhí)行");
       
 
 
        if (PlayerPrefs.GetInt("i") > 2)
        {
          Debug.Log("次數(shù)已達(dá)上限");
          mLoginUIPanel.ShowToast("次數(shù)已達(dá)上限,請明天再來!");
 
          return true;
        }
        WriteIntoTxt(useNum, filenames, file);
        //讀取本地數(shù)據(jù)
        ReadOutTxt(filenames);
        //排序
        Allmytxt.Sort();
        //對當(dāng)前號碼取最大值存入
        PlayerPrefs.SetInt("i", Allmytxt[Allmytxt.Count - 1]);
        useNum++;
        int a = 3 - Allmytxt[Allmytxt.Count - 1];
        mLoginUIPanel.ShowToast("今天還剩下"+ a+ "次注冊機(jī)會");
        Debug.Log(PlayerPrefs.GetInt("i"));
        // Debug.Log("當(dāng)前文件日期" + Convert.ToInt32(PlayerPrefs.GetString("FileTime")));
        //先判斷時間
        return false;
      }
      
      return false;
    }
 /**
     * reset重置倒計時·
     */
    public void ResetGetMsgCode()
    {
      btn_GetMsgCode.interactable = true;
      txt_CountDownTimer.text = "獲取驗證碼";
    }
 //把所有的數(shù)據(jù)寫入文本中
    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]);
 
    }
    //讀取次數(shù) 存儲到列表中
    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));
      }
      //利用文本的行數(shù)來判斷次數(shù)
      Allmytxt.Add(line);
      Debug.Log(line);
      reader.Dispose();
      reader.Close();
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:

相關(guān)文章

  • c#之事件用法

    c#之事件用法

    這篇文章介紹了c#中事件的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • 詳解CLR的內(nèi)存分配和回收機(jī)制

    詳解CLR的內(nèi)存分配和回收機(jī)制

    本文詳細(xì)講解了CLR的內(nèi)存分配和回收機(jī)制,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • WinForm實(shí)現(xiàn)讀取Resource中文件的方法

    WinForm實(shí)現(xiàn)讀取Resource中文件的方法

    這篇文章主要介紹了WinForm實(shí)現(xiàn)讀取Resource中文件的方法,很實(shí)用的一個功能,需要的朋友可以參考下
    2014-08-08
  • c#中的泛型委托詳解

    c#中的泛型委托詳解

    本文主要介紹了c#中的泛型委托。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • C#單例模式Singleton的實(shí)現(xiàn)詳解

    C#單例模式Singleton的實(shí)現(xiàn)詳解

    單例模式(Singleton?Pattern)是日常開發(fā)中最簡單的設(shè)計模式之一,它提供了一種創(chuàng)建對象的最佳方式,本文主要為大家介紹的是C#單例模式的實(shí)現(xiàn)方法,需要的可以參考一下
    2023-05-05
  • C#中BitConverter.ToUInt16()和BitConverter.ToString()的簡單使用

    C#中BitConverter.ToUInt16()和BitConverter.ToString()的簡單使用

    這篇文章主要介紹了C#中BitConverter.ToUInt16()和BitConverter.ToString()的簡單使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • winform多線程組件BackgroundWorker使用

    winform多線程組件BackgroundWorker使用

    這篇文章介紹了winform多線程組件BackgroundWorker的使用方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C#使用表達(dá)式樹實(shí)現(xiàn)對象復(fù)制的示例代碼

    C#使用表達(dá)式樹實(shí)現(xiàn)對象復(fù)制的示例代碼

    這篇文章主要介紹了C#使用表達(dá)式樹實(shí)現(xiàn)對象復(fù)制,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • 淺析C# web訪問mysql數(shù)據(jù)庫-整理歸納總結(jié)

    淺析C# web訪問mysql數(shù)據(jù)庫-整理歸納總結(jié)

    本篇文章是對C#中的web訪問mysql數(shù)據(jù)庫的一些知識點(diǎn)進(jìn)行了整理歸納總結(jié),需要的朋友可以參考下
    2013-07-07
  • C#根據(jù)身份證號碼判斷出生日期和性別

    C#根據(jù)身份證號碼判斷出生日期和性別

    這篇文章主要為大家詳細(xì)介紹了C#根據(jù)身份證號碼判斷出生日期和性別的方法,感興趣的小伙伴們可以參考一下
    2016-08-08

最新評論