0. 前言
这是一个unity配表导出工具,其实之前也有写文章在表述了,这一次是重构了一下。
- 重构属性处理,方便属性拓展
- 处理同名sheet导出,方便多人协同
- untiy菜单以及资源编辑处理,方便在Unity中使用
这次就发gitee吧,之前版本以及相关的文章都可以在专栏中找到,地址如下。后文也是对项目的一个简单介绍,也可以在gitee的readme文件中看到。
gitee地址:https://gitee.com/buuai/unity-table-exporter
csdn专栏:https://blog.csdn.net/blue_carrot_/category_12180642.html
1. 功能
- Unity Execl 表格快速导出,支持 bool,int,float,double,string,vector2 等多种属性,还有对应的数组比如 bool[]
- 属性拓展方便,程序高度可配置
- 支持多语言快捷导出
- 方便多人协同,支持多文件导出为同组数据
- 最适用 UGF,其他框架上使用需要做模板等修改
2. 配置菜单
导入后会多出一个菜单 MyTool
-
[MenuItem(“MyTool/Table Export”)]
导出数据 -
[MenuItem(“MyTool/Table Export Asset/Create Config Asset”)]
创建 Config.Asset -
[MenuItem(“MyTool/Table Export Asset/Create Template Asset”)]
创建 Template.Asset -
[MenuItem(“MyTool/Table Export Asset/Selection Config Asset”)]
找到 Config.Asset -
[MenuItem(“MyTool/Table Export Asset/Selection Template Asset”)]
找到 Template.Asset
ExportorEditor 中写了配置文件的位置 Config.Asset.Template.Asset。如果配置的位置需要更改需要在 ExportorEditor 中去更改。大部分内容都是可配置,比如导出的文件名字,内容,包括数据属性在哪一行都是可以配置的。
模板的配置
具看具体配置对应的内容可以点对应的脚本,看一下注释,都有相对完善的注释。如下。
3. 表格文件格式
表格的配置格式如下,可以看看 Demo 中的 Execl 文件
表格对应 | 表格内容 | |||
---|---|---|---|---|
1.设置项 | different | outputKey | ||
2.属性名 | Id | NextId | MapType | Name |
3.属性类型 | int | int | int | string |
4.属性注释 | 序号 | 下一个序号 | 地图类型 | 名字 |
5.数据行 1 | 1 | 2 | 1001 | 射击引导 |
n.数据行… | 2 | 3 | 1002 | 方块引导 |
-
设置项
可以为空或者其他,则没有限制
如果为 different,则要求此属性的所有属性值不能重复,否则将报错
如果为 outputKey,则此属性将会导出为 key,并导出到多语言 xml 中 -
属性类型
可以处理 bool,int,float,double,string,还有对应的数组比如 bool[]
属性值在导出的时,会按照属性类型会进行一个检查,如果错误将报错
属性值不填时,bool 默认为 false,int\float\double 默认为 false,string 为””,数组默认为 0 长度数组.
支持多个文件配置同一个类,只需要为同名 sheet 即可,但需要属性项保持一致(所在列可以不一致),
4. 属性拓展
如果需要新属性,可参考 Vector2 的拓展
- 首先我们需要一个属性类来表示这个属性,需要继承 Property 类,而名字需要为属性名+Property,首字母大写。比如 Vector2,导出时会通过反射去获取 Exportor.Vector2Property 类来新建这个类。
- 其次我们需一个 Parse 函数来做字符串到这个属性的转化,而且这个函数一般去写一个静态类中,只需把调用的函数写在 Property中即可
- 最后我们需一个数组 Parse 函数来做字符串到这个属性数组的转化,也和上面类似。具体内容如下。
- (其实第一步做完已经把导出工作做完了,而 2,3 其实决定的是数据的导入方式)
// 属性类
// Vector2Property.cs
internal class Vector2Property : Property
{
protected override bool OnFormatCheck(string content)
{
string[] temp = content.Split(",");
bool flag = false;
float tempFloat;
if (temp.Length == 2 &&
float.TryParse(temp[0], out tempFloat) &&
float.TryParse(temp[1], out tempFloat))
{
flag = true;
}
return flag;
}
public override string OnEmptyReplace()
{
return "0,0";
}
public override string GetParseFunc()
{
return "DataTableExtension.ParseVector2";
}
public override string GetArrParseFunc()
{
return "DataTableExtension.ParseVector2Arr";
}
}
// Parse 函数
// DataTableExtension.ParseVector2
public static Vector2 ParseVector2(string text)
{
string[] temp = text.Split(",");
float x, y;
if (temp.Length == 2 &&
float.TryParse(temp[0], out x) &&
float.TryParse(temp[1], out y))
{
return new Vector2(x, y);
}
else
{
return Vector2.zero;
}
}
// 数组 Parse 函数
// DataTableExtension.ParseVector2Arr
public static Vector2[] ParseVector2Arr(string text)
{
string[] texts = ParseStringArr(text);
int length = texts.Length;
Vector2[] arr = new Vector2[length];
for (int i = 0; i < length; i++)
{
arr[i] = ParseVector2(texts[i]);
}
return arr;
}
版权声明:本文为Blue_carrot_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。