视频地址
源码:
/*
*┌────────────────────────────────┐
*│ 描 述:
*│ 类 名: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();
}
}
}