【unity开发】分享一个自制 Excel 转 Unity ScriptableObject 工具

2024-08-22 12:16:23 浏览数 (2)

视频演示链接: 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资源文件,其中的列表来存放自定义可序列化的信息类对象**

最终效果:

0 人点赞