完成的内容:1.修改上一篇博文中的Bug  2.完成任务窗口逻辑

 using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; public class ActionController : MonoBehaviour
{
public Button closeBtn;
public Button recvBtn;
public Sprite[] goldSprite = new Sprite[];
public Sprite recvSprite; public Transform parent;
private List<GameObject> itemList = new List<GameObject>();
//今天点击日期
private string currentClickDate = string.Empty;
//上一次点击日期
private string lastClickDate = string.Empty;
//已领取金币的天数
private int recvCount;
/// private int totalRecvCount = 0;
////是否已重置recvCount
//private int resetRecvCount = -1; // 0表示没有重置,其他值表示已重置
////是否从未领取金币 非 0领取过,其他值表示未领取过
private int hasRecv = ;
private void Start()
{
PlayerPrefs.DeleteAll();
Init();
//获取当前日期
currentClickDate = DateTime.Today.ToLongDateString();
//currentClickDate = "2019年1月9日"; Debug.Log(currentClickDate);
Debug.Log(lastClickDate);
Debug.Log(recvCount.ToString());
LoadActionItems(); } private void Init()
{ closeBtn.onClick.AddListener(OnCloseBtn);
recvBtn.onClick.AddListener(OnRecvBtn); lastClickDate = PlayerPrefs.GetString("LastClickDate");
recvCount = PlayerPrefs.GetInt("RecvCount"); //空返回null
hasRecv = PlayerPrefs.GetInt("HasRecv");
//resetRecvCount = PlayerPrefs.GetInt("ResetRecvCount"); //空返回0
} private void OnCloseBtn()
{
gameObject.SetActive(false);
}
//如果上一次点击日期和今天日期不同,并且今天还没有点击,则更新UI。
private void OnRecvBtn()
{ //不是今天第一次点击,则什么都不做
if (lastClickDate.Equals(currentClickDate))
{
Debug.Log("今天的金币已领取");
return;
}
else
{
recvCount++;
//totalRecvCount++;
if (recvCount == itemList.Count)
{
recvCount = ;
//resetRecvCount = 1; //已重置领取天数标志
PlayerPrefs.SetInt("ResetRecvCount", );
} if(recvCount == )
{
itemList[itemList.Count - ].transform.GetChild().gameObject.SetActive(true);
}
else
{
//领取金币次数+1
itemList[recvCount - ].transform.GetChild().gameObject.SetActive(true); }
lastClickDate = currentClickDate;
PlayerPrefs.SetInt("RecvCount", recvCount);
//PlayerPrefs.SetInt("TotalRecvCount", totalRecvCount);
PlayerPrefs.SetString("LastClickDate", lastClickDate);
PlayerPrefs.SetInt("HasRecv", );
}
}
private void LoadActionItems()
{ ActionData temp = new ActionData();
for (int i = ; i < goldSprite.Length; i++)
{
//加载资源
UnityEngine.Object obj = Resources.Load("Prefabs/actionitem");
GameObject go = Instantiate(obj) as GameObject;
itemList.Add(go);
//初始化资源
go.transform.SetParent(parent);
go.transform.localPosition = new Vector3(, , );
go.transform.localScale = new Vector3(, , ); temp.day = "第" + (i + ) + "天";
temp.goldNum = (i + ).ToString();
temp.goldSprite = goldSprite[i];
temp.receiveSprite = recvSprite; go.GetComponent<ActionItem>().SetActionItem(temp);
}
//加载完资源时,更新之前已领取金币的UI
UpdateRecvInfo();
Debug.Log(recvCount);
} /// <summary>
/// 更新领取金币UI
/// </summary>
private void UpdateRecvInfo()
{
//如果从未领取过,则什么都不做
if(hasRecv == )
{
return;
}
//读取的recvCount值总是在0-6之间 // 如果recvCounmt = 0并且今天点击过,说明重置了recvCount,在显示时应该按实际天数显示。
if(lastClickDate.Equals(currentClickDate) && recvCount == )
{
//还原recvCount,但是不写入文件
recvCount = itemList.Count;
}
for (int i = ; i < recvCount; i++)
{
itemList[i].transform.GetChild().gameObject.SetActive(true); }
}
}
 //数据持久化 TO DO
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace PureMVCDemo
{
public class TaskController : MonoBehaviour
{
public GameObject taskItemPrefab;
public string[] names;
public Transform parent;
public int taskItemCount = ;
public Sprite receivedSprite;
public Sprite nonReceivedSprite;
public Button closeBtn;
private List<TaskItem> taskItemList = new List<TaskItem>(); private void Start()
{
closeBtn.onClick.AddListener(OnCloseBtn);
Init();
} private void OnCloseBtn()
{
this.gameObject.SetActive(false);
} private void Init()
{
for (int i = ; i < taskItemCount; i++)
{
GameObject go = Instantiate(taskItemPrefab);
go.transform.SetParent(parent);
go.transform.localScale = new Vector3(, , );
taskItemList.Add(go.GetComponent<TaskItem>());
UpdateTaskData(taskItemList[i], i);
}
}
private void UpdateTaskData(TaskItem taskItem, int nameIndex)
{
taskItem.nameText.text = names[nameIndex];
if(taskItem.hasReceived)
{
taskItem.recvImg.sprite = receivedSprite;
}
else
{
taskItem.recvImg.sprite = nonReceivedSprite;
} }
} }
任务系统的数据结构更加复杂,还有计时系统也比较困难,数据持久化还没处理,为了尽快完成游戏雏形,这些功能放在以后在做。

极致21点开发DAY4的更多相关文章

  1. 极致21点开发DAY2

    今天完成的主要内容时MainScene场景中设置面板的开发.游戏逻辑:点击设置按钮,弹出音乐设置弹框,弹框内容包括音乐的打开与关闭,退出游戏. 点击退出游戏,弹出退出游戏确认面板.效果图: 1.首先在 ...

  2. 极致21点开发DAY1

    最近在学习UI框架,无奈没有完整的项目学习,四处搜索找了这款游戏源码,在Unity2018上完美运行.于是乎开始学习开发这款游戏.今天主要完成的任务时拼UI.搭建了3个场景, StartScene, ...

  3. 极致21点开发DAY3

    今天完成的主要任务是活动窗口的显示与关闭,以及领取金币的逻辑.用到了数据持久化技术.我想记录的主要是领取金币的逻辑. 领取金币算法:如果今天没有领取金币,即可领取,否则什么都不做. 一句话描述足矣,但 ...

  4. Sea.js提供简单、极致的模块化开发体验

    为什么使用 Sea.js ? Sea.js 追求简单.自然的代码书写和组织方式,具有以下核心特性: 简单友好的模块定义规范:Sea.js 遵循 CMD 规范,可以像 Node.js 一般书写模块代码. ...

  5. Python全栈开发day4

    1.python三元运算 实现方法: result = 值1 if 条件 else 值2 例如: 1 2 3 4 #!/bin/env python #-*- coding:utf-8 -*- nam ...

  6. python全栈开发-Day4 列表

    python全栈开发-Day4 列表 一.首先按照以下几个点展开列表的学习 #一:基本使用 1 用途 2 定义方式 3 常用操作+内置的方法 #二:该类型总结 1 存一个值or存多个值 只能存一个值 ...

  7. 21:开发脚本管理服务端LVS案例

    [root@lb03 scripts]# cat lv_manager.sh #!/bin/bash #定义只能是root用户执行 ];then echo "permission deny ...

  8. 21 javaweb开发--bug调试技巧

    1.当修改代码后,测试时没有任何效果 解决方案:换个浏览器试试,可能是浏览器缓存的原因.

  9. IOS开发基础知识碎片-导航

    1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...

随机推荐

  1. 关于linux上部署定时python脚本

    遇到的坑: Python脚本中的文件操作,最好都用绝对路径, 文件头上写 #!/usr/local/bin/python3.6 ----------------------------------- ...

  2. SDOI2019 省选前模板整理

    目录 计算几何✔ DP 斜率优化✔ 四边形不等式✔ 轮廓线DP✘ 各种分治 CDQ分治✔ 点分治✔ 整体二分✔ 数据结构 线段树合并✔ 分块✔ K-D Tree LCT 可持久化Trie✔ Splay ...

  3. Hibernate 映射一对一关联关系

    基于外键的方式: 附上代码: public class Manager { private Integer mgrId; private String mgrName; private Departm ...

  4. Nestjs Graphql

    文档 工作示例 安装依赖: npm i --save @nestjs/graphql apollo-server-express graphql-tools graphql app.module.ts ...

  5. React组件传值

    React的单向数据流与组件间的沟通. 首先,我认为使用React的最大好处在于:功能组件化,遵守前端可维护的原则. 先介绍单向数据流吧. React单向数据流: React是单向数据流,数据主要从父 ...

  6. TP5在前端时间戳转换为时间格式

     value="{:date('Y-m-d H:i:s',$data['add_date'])}"  例如: <td>{:date('Y-m-d H:i:s',$d[' ...

  7. oracle12c

    12c和11g环境是一样的,请参考前面 一.设置环境变量 vim /home/oracle/.bashrc ORACLE_BASE=/data/app/oracle ORACLE_HOME=$ORAC ...

  8. CentOS启动docker1.13失败(Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.)

    一.启动失败 1.启动docker [root@localhost ~]# systemctl start docker Job for docker.service failed because t ...

  9. 使用MDI 和 XtraTabbedMdiManager 后 选项卡切换后Ribbon 合并后不选中MDI子窗...

    使用MDI 和 XtraTabbedMdiManager 后 选项卡切换后Ribbon 合并后不选中MDI子我这里是 继承 XtraTabbedMdiManager  所以,是重载的  OnSelec ...

  10. CentOS / RHEL 7 : How to setup yum repository using locally mounted DVD

    1. Mount the RHEL 7 installation media ISO to some directory. For example /mnt : # mount -o loop rhe ...