Unity中的第一种签到方式的源码?

视频地址
源码:

/*
*┌────────────────────────────────┐
*│ 描   述:
*│ 类   名:SignInSystem.cs 
*│ 创  建  人:
*└────────────────────────────────┘
*/

using System;
using UnityEngine;
using UnityEngine.UI;

namespace D_Bug
{
    
    
    public class SignInSystem : MonoBehaviour
    {
    
    
        #region Variables
        private const string PreviousSignInTime = "PreviousSignInTime";
        private const string SignInCount = "SignInCount";

        private DateTime _toDay;
        private DateTime _lastDay;
        private TimeSpan _interval;         //时间间隔

        private int _signInCount;           //签到次数
        private int _maxSignInCount = 5;        //最大的可签到次数

        private bool _showNextSignInTime;   //显示下一次签到时间
        private bool _isMaxSignInCount ;	//达到最大签到数

        public Toggle[] _signInToggleTips; //是否已经签到了
        public Button _signInBtn;          //签到按钮
        public Text _signInBtnContent;     //显示时间

        #endregion

        private void OnEnable()
        {
    
    
            _toDay = DateTime.Now;
            _lastDay = DateTime.Parse(PlayerPrefs.GetString(PreviousSignInTime, DateTime.MinValue.ToString()));
            _signInCount = PlayerPrefs.GetInt(SignInCount, 0);
            if (_signInCount >= _maxSignInCount)
            {
    
    
                PlayerPrefs.DeleteKey(SignInCount);
                _signInCount = 0;
            }

            UpdateUI();

            if (IsCanSignIn())
            {
    
    
                //可以签到
                _signInBtn.interactable = true;
                _signInBtnContent.text = "签到";
            }
            else
            {
    
    
                //不可以签到
                _showNextSignInTime = true;
                _signInBtn.interactable = false;
            }
        }

        private void Update()
        {
    
    
            if (Input.GetKeyDown(KeyCode.A))
            {
    
    
                PlayerPrefs.DeleteKey(PreviousSignInTime);
            }
            if (Input.GetKeyDown(KeyCode.B))
            {
    
    
                PlayerPrefs.DeleteKey(SignInCount);
            }

            if (_isMaxSignInCount)
            {
    
    
                return;
            }
            if (_showNextSignInTime)
            {
    
    
                _interval = _toDay.AddDays(1).Date - DateTime.Now;

                if(_interval >= TimeSpan.Zero)
                {
    
    
                    _signInBtnContent.text = $"{
      
      _interval.Hours}:{
      
      _interval.Minutes}:{
      
      _interval.Seconds}";
                }
                else
                {
    
    
                    //可以签到
                    _signInBtn.interactable = true;
                    _signInBtnContent.text = "签到";
                    _showNextSignInTime = false;
                }
            }
        }
        public void OnSignInBtnClick()
        {
    
    
            //给奖励
            _signInCount++;
            _lastDay = _toDay;
            PlayerPrefs.SetString(PreviousSignInTime, _lastDay.ToString()) ;
            PlayerPrefs.SetInt(SignInCount, _signInCount);
            //不可以签到
            _showNextSignInTime = true;
            _signInBtn.interactable = false;
            UpdateUI();


        }

        //是否可以签到
        private bool IsCanSignIn()
        {
    
    
            if (_signInCount >= _maxSignInCount)
            {
    
    
                _signInBtn.interactable = false;
                _signInBtnContent.text = "达到最大签到数";
                _isMaxSignInCount = true;
                return false;
            }
            if (_lastDay.Year <= _toDay.Year && _lastDay.Month <= _toDay.Month && _lastDay.Day < _toDay.Day)
            {
    
    
                return true;
            }
            return false;
        }
        private void UpdateUI()
        {
    
    
            for (int i = 0; i < _signInCount; i++)
            {
    
    
                _signInToggleTips[i].isOn = true;
            }
        }




        //本地时间转时间戳
        private long LocalTimeToTimeStamp(DateTime localTime)
        {
    
    
            //1970.1.1
            return ((DateTimeOffset)localTime).ToUnixTimeSeconds();

        }
        //时间戳转本地时间
        private DateTime TimeStampToLocalTime(long timeStamp)
        {
    
    
            //1970  +  timeStamp秒数 To 本地时间
            return DateTime.UnixEpoch.AddSeconds(timeStamp).ToLocalTime();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_30163099/article/details/126844425