服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - unity3d实现七天签到功能

unity3d实现七天签到功能

2022-11-15 13:52yffgamestart C#

这篇文章主要为大家详细介绍了unity3d实现七天签到功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了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

延伸 · 阅读

精彩推荐
  • C#C# 表达式目录树的应用详解

    C# 表达式目录树的应用详解

    下面小编就为大家分享一篇C# 表达式目录树的应用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    Torey_li7512022-02-17
  • C#C#身份证识别相关技术功能详解

    C#身份证识别相关技术功能详解

    这篇文章主要介绍了C#身份证识别相关技术详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Alex_zha9652022-01-17
  • C#C#不登录电脑启动程序

    C#不登录电脑启动程序

    本文主要介绍了创建系统服务;开启服务,启动程序。具有一定的参考价值,下面跟着小编一起来看下吧...

    歌神的卖4882021-12-20
  • C#C#使用EF连接PGSql数据库的完整步骤

    C#使用EF连接PGSql数据库的完整步骤

    这篇文章主要给大家介绍了关于C#使用EF连接PGSql数据库的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学...

    wnxyz802311022022-03-07
  • C#C#集合Collections购物车Shopping Cart(实例讲解)

    C#集合Collections购物车Shopping Cart(实例讲解)

    下面小编就为大家分享一篇C#集合Collections购物车Shopping Cart的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    杨明波(Leo Yang)11742022-02-16
  • C#详解C# Protobuf如何做到0分配内存的序列化

    详解C# Protobuf如何做到0分配内存的序列化

    这篇文章主要介绍了详解C# Protobuf如何做到0分配内存的序列化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    egmkang11052022-08-31
  • C#c# base64转字符串实例

    c# base64转字符串实例

    这篇文章主要介绍了c# base64转字符串实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    萌橙8862022-10-20
  • C#C#实体对象序列化成Json并让字段的首字母小写的两种解决方法

    C#实体对象序列化成Json并让字段的首字母小写的两种解决方法

    这篇文章主要介绍了C#实体对象序列化成Json并让字段的首字母小写的两种方法,在这两种方法中小编比较推荐使用第二种方法,需要的朋友可以参考下...

    想好了再来改名字6822022-02-24