本文实例为大家分享了unity3d实现七天签到功能的具体代码,供大家参考,具体内容如下
在很多游戏中都有签到功能,(这里记录的是7天连续签到功能的实现)
一、功能分析
1.当天是否签到的判断
2.签到天数是否连续和是否完成了7天的签到(不连续或者已经完成了7天连续签到,需要清楚数据,重新计算签到)
最主要的也就是这两个功能需要实现,其他的数据存储包括:连续签到次数,上一次签到日期。
下面的代码是默认签到送金币。不过使用的时候还是需要自己去删减或者增加自己的代码:
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
|
using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using UnityEngine.UI; using DG.Tweening; public class Jungle_DailyCheck : MonoBehaviour { /// <summary> /// 获取签到次数 /// </summary> /// <returns>The sign number.</returns> public int GetSignNum() { if (PlayerPrefs.HasKey( "signNum" )) return PlayerPrefs.GetInt( "signNum" ); return 0; } /// <summary> /// 设置签到次数 /// </summary> /// <param name="num">Number.</param> public void SetSignNum( int num) { PlayerPrefs.SetInt( "signNum" , num); } /// <summary> /// 获取上次签到日期 /// </summary> /// <returns>The sign data.</returns> public string GetSignData() { if (PlayerPrefs.HasKey( "signData" )) return PlayerPrefs.GetString( "signData" ); return DateTime.MinValue.ToString(); } /// <summary> /// 设置上次签到日期 /// </summary> public void SetSignData(DateTime data) { PlayerPrefs.SetString( "signData" , data.ToString()); } int signNum; //签到次数 DateTime today; //今日日期 DateTime signData; //上次签到日期 private bool isRewardTake = false ; public Text text_Getcoin; private void Start() { today = DateTime.Now; signNum = GetSignNum(); signData = DateTime.Parse(GetSignData()); if (IsOneDay(signData, today)) { return ; } // Debug.Log(string.Format("lastSign==={0},today===={1}", signData, today)); //新的签到周期,需要清除签到存档(清楚签到次数和上一次签到日期) if (NeedClean()) { PlayerPrefs.DeleteKey( "signNum" ); PlayerPrefs.DeleteKey( "signData" ); } signNum = GetSignNum(); OnBtnGetRewordClick(); } //签到按钮点击 public void OnBtnGetRewordClick() { signNum++; signData = today; //更新存档 SetSignData(signData); SetSignNum(signNum); //给用户加金币 DataManager.instance.SetCoin(DataManager.instance.GetCoin() + signNum * 3); text_Getcoin.transform.GetChild(0).GetComponent<Text>().text = "Get" + " " + signNum * 3 + " coins" ; text_Getcoin.gameObject.SetActive( true ); text_Getcoin.transform.GetChild(0).transform.DOScale(1.2f, 2.5f).onComplete = delegate { text_Getcoin.transform.GetChild(0).transform.localScale = new Vector3(1, 1, 1); text_Getcoin.gameObject.SetActive( false ); }; } //判断是否是同一天 bool IsOneDay(DateTime t1, DateTime t2) { return (t1.Year == t2.Year && t1.Month == t2.Month && t1.Day == t2.Day); } //需要清除数据(当签到天数大于等于7天或者签到间隔大约一天,则重置数据) bool NeedClean() { TimeSpan tsNow = new TimeSpan(today.Ticks); TimeSpan tsSign = new TimeSpan(signData.Ticks); TimeSpan tsDur = tsNow.Subtract(tsSign).Duration(); // Debug.Log(string.Format("days====={0},hours======{1},minutes====={2}", tsDur.Days, tsDur.Hours, tsDur.Minutes)); signNum = GetSignNum(); if (signNum >= 7 || tsDur.Days > 1) { return true ; } else { return false ; } } } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/yffgamestart/article/details/98208608