大家好,我是想对 使用炎拳的炎拳,上一篇星露谷中我完成了人物的移动并搭建了一个简单的界面,这篇就来瞅瞅星露谷的地是怎么种的。
首先看看游戏中的种地的过程:
![c8f6fd3bd2fed6a2972c0ddb3a55c28b.png](https://i-blog.csdnimg.cn/blog_migrate/3ff59cd2d243060b74b3f43d00fd85be.jpeg)
大致上完成一次耕种,需要这几个步骤:选中锄头—开垦一块地—选择种子种下—浇水;同时种子会随时间的流逝成长,长到有叶片后人物走过,会触发一个庄稼动一下的动画~
所以这里我要做的功能就清晰了,先整个庄稼的预制体,其中包含所需的图片文字素材,然后点击一下土地就在那位置生成一个,大功告成啦!
才怪~
![1e6e85d39a696ac1604ac5e7362edab9.png](https://i-blog.csdnimg.cn/blog_migrate/e8a8f3d52546b7432effa25afb5ae588.jpeg)
考虑到星露谷的物品繁多,如果用预制体来制作每个单独的物品,就太笨拙了;同时每个物品有自己的描述和各种属性,对应的Sprites也可以通过其地址实时读取,所以我希望能通过表格来填写这些物品的固有属性,这些数据属于静态数据。
同时种子,鱼,这些物品使用时会有数量的增减,而斧头,锄头这些道具则可以进行升级,数量,等级这些数据属于动态数据,经常改变,游戏结束也需要保存下来。
所以最后我的方案是:物品的名字,描述,Sprites地址等静态数据通过表格获得,表格的读取使用EPPlus插件实现;物品的数量,等级等动态数据,以json文件的方式保存,这里我使用了LitJson来实现。
首先写个物品的基础类,再在表格中填上对应的静态数据:
public class ItemInfo{ //动态数据,从json中获取 public int Id; public int amount; public ItemQuality itemQuality; public bool isSelected; //静态数据 public string name; public string description; public string []icons;//表格中图片名字的集合 public ItemType itemType; public Tool tool; public int growTime; /// 构造函数仅构造静态数据,通过表格id获取 public ItemInfo(int BaseDataid ) { this.name = GetBaseData.instance.baseInfo[BaseDataid].name ; this.description = GetBaseData.instance.baseInfo[BaseDataid].description; this.icons = GetBaseData.instance.baseInfo[BaseDataid].icons; this.itemType = GetBaseData.instance.baseInfo[BaseDataid].itemType; this.tool = GetBaseData.instance.baseInfo[BaseDataid].tool; this.growTime = GetBaseData.instance.baseInfo[BaseDataid].growTime ; }}
![ea868edb137c2b87d14697d99fcd93ba.png](https://i-blog.csdnimg.cn/blog_migrate/d6103d336fd9d4164cc12afec0297268.jpeg)
表格的读取我使用EPPlus插件,使用方法很简单,网上找到对应dll文件到工程,调用这两个指令集:
using OfficeOpenXml;using System.IO;
静态数据读取:
public void GetExcelData() { string FilePath = Application.dataPath + "/Resources/ItemData/BaseData.xlsx"; Debug.Log("路径" + FilePath); FileInfo fileInfo = new FileInfo(FilePath); if (fileInfo.Length == 0) { Debug.Log("Excel文件不存在"); return; } using (ExcelPackage excel = new ExcelPackage(fileInfo)) { ExcelWorksheet worksheet = excel.Workbook.Worksheets[1]; int maxRow_Data = worksheet.Dimension.End.Row; //行 int maxColumn_Data = worksheet.Dimension.End.Column; //列 int Id = 0; //从第二行开始读取数据 for