纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

unity3d七天签到 unity3d实现七天签到功能

yffgamestart   2021-04-20 我要评论
想了解unity3d实现七天签到功能的相关内容吗,yffgamestart在本文为您仔细讲解unity3d七天签到的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:unity3d,签到,下面大家一起来学习吧。

在很多游戏中都有签到功能,(这里记录的是7天连续签到功能的实现)

一、功能分析

1.当天是否签到的判断
2.签到天数是否连续和是否完成了7天的签到(不连续或者已经完成了7天连续签到,需要清楚数据,重新计算签到)

最主要的也就是这两个功能需要实现,其他的数据存储包括:连续签到次数,上一次签到日期。

下面的代码是默认签到送金币。不过使用的时候还是需要自己去删减或者增加自己的代码:

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;
        }
    }

}

相关文章

猜您喜欢

  • PHP远程调用以及RPC框架 PHP远程调用以及RPC框架

    想了解PHP远程调用以及RPC框架的相关内容吗,雨果虾滑在本文为您仔细讲解PHP远程调用以及RPC框架的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:php,远程调用,php,rpc,下面大家一起来学习吧。..
  • R语言cbind合并数据 R语言实现用cbind合并两列数据

    想了解R语言实现用cbind合并两列数据的相关内容吗,zhshmi1995在本文为您仔细讲解R语言cbind合并数据的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:R语言,cbind,合并两列数据,数据合并,下面大家一起来学习吧。..

网友评论

Copyright 2020 www.iunios.com 【OS下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式