[游戏开发]UGF 配表导出工具

2023-10-30

0. 前言

整理一下,之前做的一个配表导出工具,主要作用就是将 excel 的内容导出为数据和代码,不用每次配表都重新处理.项目的源码还有exe 都上传到了百度云,链接如下

链接:https://pan.baidu.com/s/1xW9Rc_cxr48KgI84gy24Lg
提取码:wsad

1. 效果以及使用

(1)效果使用

运行 Exportor.exe 就可以了,不过需要先配置好路径。可以处理 bool,int,float,double,string,还有对应的数组,数组用"|"隔开。比如配表是

请添加图片描述

那么导出的内容为

请添加图片描述

如果错误,有对应提示

请添加图片描述

(2)配置

配置在 Config.txt 中,依次配置为

  • LoadPath 加载路径
  • SaveDataPath 导出数据保存路径
  • SaveCodePath 导出代码保存路径
  • CodeClassPrefix 导出代码类民名前缀
  • CodeParseFuncName 导出转化函数名
//Config
//LoadPath
..\..\UnityProject_funnyEn\Assets\GameMain\DataTables\Excel
//SaveDataPath
..\..\UnityProject_funnyEn\Assets\GameMain\DataTables
//SaveCodePath
..\..\UnityProject_funnyEn\Assets\GameMain\Scripts\DataTable
//CodeClassPrefix
DR
//CodeParseFuncName
ParseDataRow

模板在 Template.txt 中,如果只是简单的更改,可以直接在 Template 中更改就可以了

  • {className}将会被替换成 类名
  • {property}将会被替换成 属性段
  • {parseFunc}将会被替换成 parse 函数
using GameFramework.DataTable;
using System.Collections.Generic;

namespace GDT
{
    public class {className} : IDataRow
    {

{property}

{parseFunc}

        private void AvoidJIT()
        {
            new Dictionary<int,  {className}>();
        }

    }
}

(3)额外处理

  • 回车符和制表符导出会有问题,所以会替换为"\t","\n"的字符来代替
  • 第一行某一列标记 different,这样这一列将不能有重复的内容,如果有,将会报错无法导出
  • 会忽略"_"开头的 sheet
  • 数据行的内容的,只有有填的第一属性,的那一行的才会被导出,其余将会忽略

2. unity 中使用

可以将代码直接复制到 unity 中去用,但我不推荐,我感觉可以将这个东西作为一个独立的程序来使用,那么后面 unity 因为配表问题
而无法打开的时候,还可以用这个独立的程序来处理。那们可以通过 unity 菜单调用这个程序的方式来调用,就不用每次都去找这个程
序,脚本如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

#if UNITY_EDITOR

using UnityEditor;
using System.Diagnostics;

public class DataTableTool : Editor
{
    [MenuItem("MyTool/Data Export")]

    public static void DataExport()
    {
        string exePath = @"..\Exportor\exe";
        string name = "exportor.exe";
        ProcessStartInfo info = new ProcessStartInfo(name);
        info.WorkingDirectory = exePath;
        Process p = Process.Start(info);
        AssetDatabase.Refresh();
    }
}

#endif

那么在 Unity 中就可以这样使用了

请添加图片描述

3. 拓展方向

基本上也是可以正常使用了,当然还有很多可拓展处理的方向,如果后来要重新处理的话,那么应该有这几个方向可以处理。

  • 配置内容全部可更改,并处理到excel中。方便编辑。
  • 命令行启动参数配置处理。可用命令行来配置参数,以及调用运行,这样调用就更加方便。
  • 增加字典段内容处理。只有数组有些时候也不太够用。
  • 增加导出检查。比如导出检查某某id是否符合要求,数组长度是否符合,但这个也不一定好,可能在实际运行中才好检查,配表导出阶段可能检查比较麻烦。
  • 增加标记段处理内容。different作为不同标记,那可否有length等作为长度标记,或者matchxx作为关联标记,必须在其他配表中存在该内容才行。这样配表工具功能更加丰富。

4. 结束

到这里也就讲完咯,希望能够提供一个参考。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[游戏开发]UGF 配表导出工具 的相关文章

  • 进程何时获得 SIGABRT(信号 6)?

    C 中进程获得 SIGABRT 的场景有哪些 该信号是否始终来自进程内部 或者该信号可以从一个进程发送到另一个进程吗 有没有办法识别哪个进程正在发送该信号 abort 向调用进程发送SIGABRT信号 就是这样abort 基本上有效 abo
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • 从 MVC 迁移到 ASP.NET Core 3.1 中的端点路由时,具有角色的 AuthorizeAttribute 不起作用

    我正在尝试将我的项目从 UseMVC asp net core 2 2 兼容样式 升级到 UseEndpoint Routing 并且我的所有请求都被重定向到我的验证失败页面 它与声明有关 如果我删除 Authorize Roles Adm
  • 构造函数中显式关键字的使用

    我试图了解 C 中显式关键字的用法 并查看了这个问题C 中的explicit关键字是什么意思 https stackoverflow com questions 121162 但是 那里列出的示例 实际上是前两个答案 对于用法并不是很清楚
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 如何在c#中的内部类中访问外部类的变量[重复]

    这个问题在这里已经有答案了 我有两个类 我需要声明两个类共有的变量 如果是嵌套类 我需要访问内部类中的外部类变量 请给我一个更好的方法来在 C 中做到这一点 示例代码 Class A int a Class B Need to access
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • 在 C 中使用 GNU automake 中的解析器

    我是 GNU autotools 的新手 在我的项目中使用了 lex 和 yacc 解析器 将它们作为 makefile am 中的源代码会产生以下错误 配置 in AC CHECK PROGS YACC bison yacc none i
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • System.Runtime.InteropServices.COMException(0x80040154):[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 C 项目中遇到异常 System Runtime InteropServices COMException 0x80040154 检
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder

随机推荐