是什么?
主要功能
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这类的, 详细可以看这里 。
这里因为字典不能序列化所以需要在游戏加载时,初始化数据一次。
原理就说这么多吧,再具体的大家可以看看源码。
Unity可以读取Excel表格数据文件.xls或.xlsx。方法有:1. 利用已有的 Unity Excel 插件,这个你到 Asset Store 上搜索 Excel 就能找到。或者在 这里下载
2. 利用第三方的 *** 作 Excel 的 .NET 库,把 DLL 导入进 Unity 工程并调用它的功能。比如 ExcelDataReader、EPPlus
参考,通用读取方法:需要添加如下引用:
System.Configuration
System.Data
System.EnterpriseServices
System.Security
System.XML
using UnityEngine
using System.Collections
using System
using
System.Data
using System.Data.Odbc
public class EXCELREADER :
MonoBehaviour {
DataTable dtYourData = new DataTable("YourData")
string str = ""
// Use this for initialization
void Start ()
{
readXLS(Application.dataPath + "/Book1.xls")
str = ""+dtYourData.Rows[2][dtYourData.Columns[2].ColumnName].ToString()
}
// Update is called once per frame
void Update ()
{
}
void OnGUI(){
GUILayout.Label(str)
}
void readXLS( string filetoread)
{
// Must be saved
as excel 2003 workbook, not 2007, mono issue really
string con =
"Driver={Microsoft Excel Driver (*.xls)}DriverId=790
Dbq="+filetoread+""
Debug.Log(con)
string yourQuery =
"SELECT * FROM [Sheet1$]"
// our odbc connector
OdbcConnection oCon = new OdbcConnection(con)
// our command
object
OdbcCommand oCmd = new OdbcCommand(yourQuery, oCon)
// table to hold the data
// open the connection
oCon.Open()
// lets use a datareader to fill that
table!
OdbcDataReader rData = oCmd.ExecuteReader()
//
now lets blast that into the table by sheer man power!
dtYourData.Load(rData)
// close that reader!
rData.Close()
// close your connection to the spreadsheet!
oCon.Close()
// wow look at us go now! we are on a roll!!!!!
// lets now see if our table has the spreadsheet data in it, shall
we?
if(dtYourData.Rows.Count >0)
{
// do something with the data here
// but how do I do this
you ask??? good question!
for (int i = 0i <
dtYourData.Rows.Counti++)
{
// for
giggles, lets see the column name then the data for that column!
Debug.Log(dtYourData.Columns[0].ColumnName + " : " +
dtYourData.Rows[i][dtYourData.Columns[0].ColumnName].ToString())
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)