【Unity】读取Excel工具
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【Unity】读取Excel工具相关的知识,希望对你有一定的参考价值。
参考技术A 是什么?
主要功能
1.就是上面说的,转化为ScriptObject数据类,这里分为两种:
a.分离一个Excel表中的所有sheet为单独的一个数据体。
b.把一个Excel表中所有的sheet合成在一个数据体中。
注意:第二种exce中必须每一个sheet的数据项是一样并且位置也是相同的
2.可以选择每一个sheet或者sheet中的数据单项是否被生成到数据体中。
3.系统会自动识别每一个数据单项的数据类型与数据参数名,当然也可以用户更改。
4.在创建数据体完成后,再改表中的数据,数据体自动更新。当然如果是增加删除单项数据,就需要重新生成数据体。
使用方法
1.在Project视窗下选中需要生成数据类的Excel表,右键菜单,选择“Read Excel”。
5.然后在游戏载入时调用一下下面这一句话。
6.实际运用时数据分为两类:
a.分离单数一个sheet的数据体访问。
testObj_Sheet1是你的数据类,然后使用GetData方法传入id即可返回数据体实例。
b.合并sheet的数据体访问方式。
testObj是你的数据类,然后使用GetSheet方法获得sheet,这里自动帮用户生成了sheet的枚举,用户可以直接使用枚举来获得sheet,然后的方法和上一种一样。
原理
unity使用.net的api是2.0的,所以没有可以直接读取Excel哪部分源码。就选择使用了NPOI这样一个开源框架。这里有几个学习NPOI的传送门, 官网 、 官网繁体文档 、 官网英文文档 、 CSDN博客推荐看这个 ,具体的就不详细讲解了。
读取到数据后再使用try测试数据类型,自动填充数据类型。这里就是为什么浮点型需要用户自己设置的原因。
使用的ScriptObject这个Unity给出可以用来存数据的资源。这个其实也可以更改成Json文件,这样服务器跟客户端都可以用了。不过ScriptObject可以很直观的看到数据的储存。
这里用到一个资源变化的回调OnPostprocessAllAssets,这个是需要继承于AssetPostprocessor这类的, 详细可以看这里 。
这里因为字典不能序列化所以需要在游戏加载时,初始化数据一次。
原理就说这么多吧,再具体的大家可以看看源码。
Unity3D读取之——读取Excel文件内容
Unity3D开发过程中,对于Excel表的读取是很频繁的一件事情,主要是用来记录各种数据,各个平台可能有很多方式方法,比如Android,你可以插件,也可以用第三方Java开发,打包成Plugin下用的.dll包,再C#和Java交互实现Excel读取(比较麻烦,不建议,除非你对安卓开发也很了解,可以使用)
今天说一下FlexReader插件,专门读取Excel文件内容。
直接上代码:
插件:可以上Asset Store上直接搜FlexReader(土豪使用)
下载地址:链接:https://pan.baidu.com/s/1mLTu2ymQY0Wmvpzb0DQ5iw 密码:j9m6
//异步加载文件
IEnumerator LoadGuideAync(string path, DownloadHandler handler)
{
var url = Path.Combine(Application.streamingAssetsPath, path);
using (var request = UnityWebRequest.Get(url))
{
yield return request.SendWebRequest();
var bytes = request.downloadHandler.data;
handler(bytes);
}
}
//加载到内容回调
void LoadGuideData(byte[] bytes)
{
//bytes就是加载Excel中文件内容流
if (bytes.Length == 0)
return;
//通过插件的WorkBook类转换得到一个列表,这个列表的大小就表示的是Excel中表的个数。
var book = new WorkBook(bytes);
Debug.Log(book.Count);
if (book.Count < 2)
return;
InitNoviceGuideRectTransform(book[0]);
InitNoviceGuideRectTransform(book[1]);
}
对每一个表进行解析,读取每格的数据
void InitNoviceGuideRectTransform(IEnumerable<Row> rows)
{
int index = -1;
int count = rows.Count(r => !r.IsEmpty());
if (count == 0)
return;
//将二维数字存到列表 ,通过行列读取
List<Row> rowData = new List<Row>(rows);
for (int j = 1; j < rowData .Count; j++)//行
{
for (int i = 0; i < rowData[j].Count; i++)//列
{
Debug.Log(rowData[j][i].Text);
}
}
}
就是这么简单,读取你想要的数据,干你想干的事情。
以上是关于【Unity】读取Excel工具的主要内容,如果未能解决你的问题,请参考以下文章