前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【unity开发】分享一个自制 Excel 转 Unity ScriptableObject 工具

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

原创
作者头像
车车马马
发布2024-08-22 12:16:23
710
发布2024-08-22 12:16:23
举报
文章被收录于专栏:Unity开发

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

最终效果:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档