[编程工具]Unity配表导出工具

  • Post author:
  • Post category:其他




0. 前言

这是一个unity配表导出工具,其实之前也有写文章在表述了,这一次是重构了一下。

  1. 重构属性处理,方便属性拓展
  2. 处理同名sheet导出,方便多人协同
  3. untiy菜单以及资源编辑处理,方便在Unity中使用

这次就发gitee吧,之前版本以及相关的文章都可以在专栏中找到,地址如下。后文也是对项目的一个简单介绍,也可以在gitee的readme文件中看到。

gitee地址:https://gitee.com/buuai/unity-table-exporter
csdn专栏:https://blog.csdn.net/blue_carrot_/category_12180642.html



1. 功能

  1. Unity Execl 表格快速导出,支持 bool,int,float,double,string,vector2 等多种属性,还有对应的数组比如 bool[]
  2. 属性拓展方便,程序高度可配置
  3. 支持多语言快捷导出
  4. 方便多人协同,支持多文件导出为同组数据
  5. 最适用 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 的拓展

  1. 首先我们需要一个属性类来表示这个属性,需要继承 Property 类,而名字需要为属性名+Property,首字母大写。比如 Vector2,导出时会通过反射去获取 Exportor.Vector2Property 类来新建这个类。
  2. 其次我们需一个 Parse 函数来做字符串到这个属性的转化,而且这个函数一般去写一个静态类中,只需把调用的函数写在 Property中即可
  3. 最后我们需一个数组 Parse 函数来做字符串到这个属性数组的转化,也和上面类似。具体内容如下。
  4. (其实第一步做完已经把导出工作做完了,而 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 版权协议,转载请附上原文出处链接和本声明。