1 2 3 4 5 6 7 8 9 10

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

视频演示链接: https://www.bilibili.com/video/BV1Nw4m1q7qt/
资源文件: https://github.com/asyaB404/ExcelToScriptableObject

上网找了半天都找不到满意的,所以就自己写了一个
默认实现了支持int float bool string 自定义枚举 Sprite类型的转换
本人菜鸟一枚,第一次分享自己的成果,有什么问题请立即联系我
写完才发现写的很屎。。可以尝试自己优化或拓展一下
但我考虑到是编辑器开发就没去优化了

工具介绍

根据excel表生成多个sobj资源文件

前置准备

工具包含一个名为ExcelableScriptableObject.cs的抽象类和ExcelToolsGUI.cs一个工具类
使用前先确保上述抽象类在项目内
工具类和ExcellDll文件夹在项目中的Editor文件夹内
然后在编辑器窗口就能打开工具了

下面的路径填文件夹就行,一次操作对文件夹内所有的excel表生效
即支持多个Excel文件,Excel表同时操作
路径相对于项目内的的 MyProject/Assest/

格式

Excel表配置格式为:
第一行:字段名
第二行:类型(默认支持int float bool string 自定义枚举 Sprite类型)
第三行:注释(随便写

excel表中的枚举类型需要自己提前创建
枚举类型在Excel表的格式为 “Enum.枚举名称”
例如:
Excel表示例图:

原理

按钮创建SOBJ的原理是先利用IO流直接生成一个自定义SOBJ类文件,并继承ExcelableScriptableObject.cs
自定义SOBJ类的类名取决于Excel表的表名(如下图就会生成 物品.CS和ffgg.CS)
同时excel的文件名会作为命名空间

ExcelableScriptableObject.cs为抽象类,作用是为sobj进行里氏替换后提供Init虚函数
如下图

Init函数作用为根据传入的excel的数据行来进行sobj资源文件的数据初始化
然后根据excel表的第一行和第二行作为自定义SOBJ类的字段和类型同时实现上述的Init函数

自定义类示例图:

等待刚刚创建的SOBJ自定义类编译完成后就能创建SOBJ资源文件了
而按钮创建SOBJ对应的资源文件的原理为,从第四行开始读取Excel表
然后创建资源文件的将Excel表信息行作为参数传入Init方法,完成sobj资源文件的初始化赋值并创建

自定义Init方法来实现其他类型的数据配置

Init(DataRow row)中的row为excel表的数据行,是一个可迭代容器
可以利用row[n].ToString()来得到excel表中数据行的第n+1列的字符串

所以你想自己拓展支持其他数据类型(比如Vector,数组)的话
可以自己重写工具生成的SOBJ自定义类中的Init方法

主要目的是将excel那边传过来的string根据自己的期望来进行数据转换
例如原本的默认实现int float就如图下实现
image

以Vector3为例子
字段名为:
public Vector3 pos;
excel表第一列对应pos 内容为"1,2"
那么Init函数即可自己重写成

//unity其实并不存字符串转Vector3这个函数,得自己写
//具体思路其实就是根据,作为分割符分割,然后再转成对应的float,最后创建一个Vector3赋值即可
pos = StringToVector3Converter(row[0].ToString());

重写完之后不要再点按钮创建SOBJ,否则会被覆盖到之前的Init方法
然后再在工具那里点击按钮创建SOBJ对应的资源文件就会调用你重写之后的Init方法来创建资源文件

最终效果:

仅生成单个sobj,里面存放对应的自定义数据列表

就是第二个页面

第二个页面和第一个页面的区别是不会生成多个sobj资源文件而是只生成一个

原理和上述类似
但生成sobj类文件的同时还会生成一个自定义可序列化的数据类
sobj类名同样为excel表名,自定义可序列化的数据类名会再前者的基础上多一个InfoClass的后缀
如图下为以levelsobj命名的table表的sobj类和自定义可序列化数据类示例

自定义数据类同样是支持自己重写Init函数来支持自己想要的数据类型

同样是等待编译结束后
生成一个sobj资源文件,其中的列表来存放自定义可序列化的信息类对象

最终效果:

注意事项

如果excel表的字段变更或者更新,则需要重新生成sobj类,再次生成资源文件(点击第一个创建按钮,再点击第二个创建按钮)
如果excel表的字段不变,仅仅是更新或者添加新的行数据,则仅需要重新生成对应的资源文件(点击第二个创建按钮)

posted @   mayoyi  阅读(238)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示