<!doctype html>

配置表系统

配置表系统

  • 配置表介绍

    每个游戏中都或多或少都有一些游戏配置,而团队又是由各个不同职位的成员组合,有程序、策划、美术等等,不同的职位需要同时对游戏逻辑进行干涉,这就造成了耦合关系,如果没处理好耦合关系的话,就会使效率变慢,配置表的意义就是程序实现好了逻辑之后,策划可以根据策划的需求去调整配置表。

    该配置表系统采用csv的格式配置文件。csv,又称为逗号分隔值文件格式,是按照固定分隔字符(一般是逗号)分隔的纯文本文件,因为是纯文本文件,所以在不同平台不会有兼容性问题,支持Excel编辑并输出csv格式,比xml或json少了很多重复键值的定义,文件占用小,编辑和查看更加方便,是一种广泛商业使用的格式。

    csv的文件格式如下:item.csv(注意:id不能重复)

    iditemNamepriceeffect
    #自增id物品名称价格使用效果(hug:饥饿值#加多少;gold:金币#加多少)
    1001鱼蛋10hug#10;gold#-10;
    1002麻球20hug#20;gold#-20;

  • 快速开始

    • 使用方法1(该方法只是初级用法,正式开发请使用方法2)

    • 使用方法2(正式开发请使用该方式)

      1. 将配置表与类关联(对于上面csv,转成的类如下,下面会详细介绍如何快速将配置表转换类)

      2. 直接通过代码即可快速获取数据(该类的基类已经处理了加载流程)

  • 配置表工具

    • Config Setting-工具设置(打开方式:Egogame-Config/Config Setting Window)

      image-20201026140818180

      说明

      该工具是配置配置表的路径,列出当前自动识别到的文件,以及提供一些同步按钮,支持快速更新/同步配置表文件

      工具介绍

      • 原始配置表路径(xlsx):配置原始配置表(xlsx格式)的路径,一般是在art目录下

        如:D:\felix\cottongame\art\BoyVolunteers\doc\配置表

      • 美术svn的CSV路径:配置导出的csv配置表的路径,原始配置表会导出csv放到该路径,然后同步到Unity

        如:D:\felix\cottongame\art\BoyVolunteers\export\Resources\Config

      • Unity项目的csv路径:csv在Unity的存放路径,默认是在Assets/Game/Resources/Config,配置为该路径即可

      • csv导出软件路径:配置xlsx导出csv格式文件的软件安装路径(.exe路径下),推荐使用LibreOffice,Excel也可以但是Excel是使用VB导出的,有点慢

        LibreOffice默认安装路径:C:\Program Files\LibreOffice\program

        Excel默认安装路径:C:\Program Files\Microsoft Office\root\Office16

      • CSV配置表:自动找到“Unity项目的csv路径“下的csv文件,列出来,可以点击编辑/生成类/外部打开。一般主要用到生成类,该操作是自动生成对应的继承CSVConfig的类,如ItemCfg,生成的路径在Assets/Game/Scripts/Config

        生成类也可以使用另外一种方式:在Unity编辑器选择csv,右键Config/Create也可创建类

      • 配置表类:列出当前已经生成了类的项,可以点击编辑进行数据编辑,通过该工具可以将数据修改并写入Excel原始表中。

      • 同步Art配置表到Unity:更新美术svn的CSV路径,并自动拷贝到Unity项目

      • 提交Unity的配置表:提交Unity的csv配置表到svn。

      • 提交Art的配置表:弹出svn窗口,将美术资源svn的csv文件提交到svn

      • 打开配置工具:打开配置工具,进行原始数据的修改。


      使用方法

      以上述Item表为例:

      1. 准备一个Item表源文件,item.xlsx,并配置好header头和数据,如上面的配置表

      2. 在ConfigSettingWindow配置对应路径

      3. 配置了“原始配置表路径”后,会多出一个Tab标签,列出当前路径下的所有xlsx源文件

        image-20201102105824540

      4. 在原始配置表中找到对应xlsx源文件项,点击“导出csv”按钮,自动将配置表导出csv格式到“美术svn的CSV路径”下。

      5. 点击“同步Art配置表到Unity”按钮,将导出的csv同步到unity

      6. 在“CSV配置表”标签下找到对应的csv文件项,点击生成类,会自动生成对应的类。如:ItemCfg

        生成的路径在:Assets/Game/Scripts/Config

      7. 修改该类的解析方式和变量类型


    • Config Editor Window-原始Excel数据修改(打开方式:Egogame/Config/Config Editor Window)

      image-20201026144915134

      描述

      使用Excel编辑数据的缺点是,对于一些数据不能可视化显示,如道具id为1001,没法编辑时显示为“鱼蛋”,但是保存时保存为1001,还有一些下拉列表等特殊需求,没法可视化显示出来。该工具就是重绘制这些属性,并且支持直接在这个工具修改并保存Excel。上面图片的下拉菜单就是个例子。

      使用方法

      以上述Item表为例:

      1. 找到上面创建出来的ItemCfg类

      2. 自动生成的类应该已经重写displayName,该displayName就是窗口左边"3001(原木)"那个区域显示数据,按照需求修改displayName赋值

      3. 给VO类添加标签

        LabelText:将变量名重新绘制

        Range:Unity自带标签,使数据在区间调节

      4. 对特殊变量,如变量名和csv的头名称不一致时,需要指定解析规则

      5. 如果成员变量是BaseKeyData或者BaseKeyData数组,需要实现BaseKeyData的OnWrite方法。


       

  • 相关类介绍

    • CSV类

      描述

      解析csv文本文件的工具类,封装了一些常用的API如获取某个格子的数据等等。该工具类只需要了解解析原理即可,一般不需要用到。他的作用是按照csv格式解析数据并缓存。

      方法

      方法名返回类型说明
      ParseCSVList<string[]>解析文本文件,返回解析后的数据
      ToCSVStringstring将数据转为csv数据(如果有双引号,则自动增加"")
      GetValueByLineAndRowstring通过行和列获取数据
      GetLineTextDictionary<string,string>获取行数据
      GetDataByLineDictionary<string,string>获取某行的数据项字典
      GetDataByNameAndValueDictionary<string,string>获取匹配key和value的格子数据
      LineDatasList<Dictionary<string,string>>行数据
      HeaderTypeDataDictionary<string, string>获取头类型
      DatasDictionary<string, Dictionary<string, string>>总数据
      Countint总行
      Headersstring[]文件头
      Commentsstring[]备注
      HeaderTypesstring[]头类型
      Contentstring源文本数据
      AssetNamestring文件名

    • BaseConfig类

      描述

      配置文件基类,主要功能是根据文件路径,自动加载文件并提供重写方法,供子类进行重写解析为对应格式的数据。文本文件修改时,自动更新类缓存的数据。

      方法

      方法名说明
      LoadFile加载文件(一般情况下不需要调用,实例化构造体时会自行调用)
      LoadCSV改变CSV(直接设置CSV数据)
      IsSameFile判断是否是同名文件
      Reload重新读取该文件并通知数据变更
      FileName当前文件名

      可重写

      方法名说明
      OnParserBeginHandle解析开始
      OnParserHandle正式解析
      OnParserResetHandle数据重置,一般用来清空自定义的缓存数据变量
      OnParserEndHandle解析结束

    • CSVConfig<T,T2>类

      描述

      该类是针对csv的解析类,自动将文本文件解析为特定类格式的数据,提供给其他类继承。T一般是VO类,而T2就是继承的类的本身。

      继承关系

      继承:BaseConfig

      实现接口:IConfig

      属性

      属性名返回类型说明
      ConfigListList所有配置项列表(如上面的示例,一行数据就会解析为一个T类)
      InstanceT2获取单例
      ConfigItemsIList同ConfigList,只是这个是返回IList
      IdNamestring该表以哪个字段作为Key,一般是第一列的头名称
      EditorItemsList为了支持编辑器工具的数据(大概了解即可)

      方法

      方法名返回类型说明
      GetDataT通过键值获取T类,如上面示例,通过1001可以获取包装后的T类
      HasDatabool通过键值判断是否有该数据项
      GetConfigListList获取配置列表。同属性ConfigList
      GetTableDataDictionary<string, string>将一个vo转换为字典形式,可以转换填在配置表中。默认支持List、string、int、float。(编辑器使用,了解即可)
      CloneConfigEditorItem克隆EditorItem(编辑器使用,了解即可)

      可重写

      方法名返回类型说明
      OnDecodeCSVHandleT提供将文本数据解析为类的实现接口
      OnProviderEditorItemHandlevoid(编辑器工具使用)提供重写EditorItem数据(需实现,主要重写displayName)
      OnProviderTableDataHandlevoid(编辑器工具使用)提供将数据反写入原始Excel表格的重定向,主要解决如果数据没有自动映射时,需要提供重定向。

    • BaseKeyData类

      描述

      该类的作用是作为VO类的成员,CSVConfig将类解析为VO类,但是如果某个单元格的数据是列表或者更复杂的数据呢?该类就是用来解析单元格复杂数据的,按照一定的格式。目前支持的格式为:#号分隔,$号分隔,;号分隔。请配合ConfigUtil类使用,后续会介绍到。

      如上面的示例表,数据项hug#10;gold#-10;将解析为List,分号代表数组分隔,#号代表数据分隔,$代表数据项的子数据分隔。

      使用方法

      1. 继承BaseKeyData

      2. 实现OnRead,获取数据,并将数据赋值到变量

      3. 实现OnWrite,按照数据顺序,将数据写入Excel(主要是编辑器工具使用)

      方法

      方法名返回类型说明
      GetString(int index)string获取string
      GetInt(int index)int获取Int
      GetFloat(int index)float获取float
      GetBool(int index)bool获取bool
      GetIntEnum(int index)T获取枚举(如数据是1,则使用1转为枚举)
      GetStringEnum(string value)T通过字符串获取枚举(如数据是hug,则使用hug转为枚举)
      WriteData(string value)void写入String
      WriteData(float value)void写入float
      WriteData(int value)void写入int
      WriteData(BaseKeyData value)void写入BaseKeyData
      HasData(int index)bool判断索引是否有数据
      ToTextValue(List datas)string转成Text
      ToTextValue(string[] datas)string转成Text
      GetTableStringData()string获取表格数据(编辑器用)

      属性

      属性名返回类型说明
      ParserTypeConfigUtil.ParserType解析类型
      Textstring原始文本
      Errorstring错误信息(可以提供显示错误信息)

      可重写

      方法名说明
      OnRead获取数据,并将数据赋值到变量
      OnWrite按照数据顺序,将数据写入Excel(主要是编辑器工具使用)
      IsError判断该类是否有解析数据错误信息(方便统一显示)

    • ConfigUtil类

      描述

      该类是一个静态工具类,主要作用是提供一些方法,快速将数据转换为对应KeyData类等等。

      方法

      方法名返回类型说明
      ToIntEnum(string value)T将int数据转换为枚举
      T ToStringEnum(string value)T将string数据转换为枚举
      ToInt(string value)int转Int
      ToFloat(string value)float转Float
      ToBool(string value)bool转bool
      ParserToKeyDatasList将string转成数据数组,如1#2#3;1#2#4。
      ParserToKeyDataT:BaseKeyData将string转成数据类
      Parser2Array(string text)string[]将string转成数组(;号分隔)
      Parser2Vector3(string text)Vector3将string转成Vector3(#号分隔)
      Parser2List(string text)List将string转成数组
      Parser2IntList(string text)List将string转成数组
      ParserValueListstring[]将string转换为数组
      ValueListToTextstring数组转String
      ParserSubValueListstring[]将string转数组(数据是$号分隔)
      SubValueListToText(string[] valueList)string数组转String(数据是$号分隔)
      KeyDataToText(BaseKeyData keyData)stringKeyData转string
      KeyDatasToText(IList list)stringKeyData数组转string
      GetConfigDropdownItemsIEnumerable获取配置表的ValueDropdownList Id,主要是为ValueDropdown标签提供数据

    • 拓展标签

      • ConfigAttribute

        说明

        为string类型变量提供选择功能

        使用示例

        使用ItemCfg类的ItemIdList变量作为选择列表

      • ValueDropdown

        说明

        该标签为Odin标签,更多Odin标签请参照官方教程。

        该标签跟上面标签类似,提供源数据作为可选择列表。

        使用示例

        示例2:

        • 更多Odin标签请查看Tools/Odin Inspector/Getting Started或参照官方教程。