视频演示链接: https://www.bilibili.com/video/BV1Nw4m1q7qt/
资源文件: https://github.com/asyaB404/ExcelToScriptableObject
上网找了半天都找不到满意的,所以就自己写了一个
本人菜鸟一枚,第一次分享自己的成果,有什么问题请立即联系我
写完才发现写的很屎。。可以尝试自己优化或拓展一下
但我考虑到是编辑器开发就没去优化了
工具包含一个名为**ExcelableScriptableObject.cs**的抽象类和**ExcelToolsGUI.cs**一个工具类
使用前先确保抽象类在项目内,工具类和ExcellDll文件夹在项目中的Editor文件夹内
然后在编辑器窗口就能打开工具了
下面的路径填文件夹就行,一次操作对文件夹内所有的excel表生效
即支持多个Excel文件,Excel表同时操作
路径相对于项目内的的 MyProject/Assest/
Excel表配置格式为:
第一行:字段名
第二行:类型(支持int float bool string 自定义枚举类型)
第三行:注释(随便写
**excel表中的枚举类型需要自己提前创建**
枚举类型在Excel表的格式为 “Enum.枚举名称”
例如:
Excel表示例图:
按钮**创建SOBJ**的原理是先利用IO流直接写一个自定义SOBJ类文件,并继承**ExcelableScriptableObject.cs**类
自定义SOBJ类的类名取决于Excel表的表名(如下图就会生成 物品.CS和ffgg.CS)
**ExcelableScriptableObject.cs**为抽象类,作用是为sobj进行里氏替换后提供Init虚函数
如下图
Init函数作用为根据传入的excel的数据行来进行sobj资源文件的数据初始化
然后根据excel表的第一行和第二行作为自定义SOBJ类的字段和类型同时实现上述的Init函数
自定义类示例图:
等待刚刚创建的SOBJ自定义类编译完成后就能创建SOBJ资源文件了
而按钮**创建SOBJ对应的资源文件**的原理为,从第四行开始读取Excel表
然后创建资源文件的将Excel表信息行作为参数传入Init方法,完成sobj资源文件的初始化赋值并创建
/*自定义拓展内容
*Init(DataRow row)中的row为excel表的数据行,是一个可迭代容器
*可以利用rown.ToString()来得到excel表中数据行的第n 1列的字符串
*
*所以你想自己拓展支持其他数据类型(比如Vector,数组,sprite)的话
*可以自己重写**工具生成的SOBJ自定义类**中的Init方法
*
*以Vector3为例子
*字段名为:
*public Vector3 pos;
*excel表第一列对应pos 内容为"1,2"
*那么Init函数即可自己重写成
*{
*pos = StringToVector3Converter(row0.ToString()); //unity其实并不存字符串转Vector3这个函数,得自己写
*}
*
*重写完之后不要再点按钮**创建SOBJ**,否则会被覆盖到之前的Init方法
*然后再在工具那里点击按钮**创建SOBJ对应的资源文件**就会调用你重写之后的Init方法来创建资源文件
*/
最终效果:
接下来说说第二个页面
第二个页面和第一个页面的区别是**不会生成多个sobj资源文件而是只生成一个**
生成sobj类文件的同时还会生成一个自定义可序列化的信息类
sobj类名同样为excel表名,自定义可序列化的信息类名会再前者的基础上多一个InfoClass的后缀
如图下为以levelsobj命名的table表的sobj类和自定义可序列化信息类示例
自定义信息类同样是支持自己重写Init函数来支持自己想要的数据类型
同样是等待编译结束后
生成**一个sobj资源文件,其中的列表来存放自定义可序列化的信息类对象**
最终效果: