跳到主要内容
版本:Next

配置定义

Luban有一套独立于具体实现的Schema逻辑结构实现。对怎么定义配置没有要求,只要最终的定义能被 加载解析为schema逻辑结构,就能被统一处理。Luban.Schema.Builtin模块提供了一个默认的SchemaCollector 实现。如果不能满足要求,开发者可以实现自定义的SchemaCollector,适应自己的项目需要。

本文档介绍DefaultSchemaCollector实现的配置定义格式。由于DefaultSchemaCollector是Schema逻辑结构 的实现,大多数配置项是一一对应的。因此除了特殊情况,不再介绍这些字段的具体含义,请直接查阅该文档。

excel定义文件

由于excel表格适用于表达相似的定义,因此enum、bean、table需要分别在不同的单元薄或者文件中定义。

enum类型定义文件

一般来说,定义文件都放到Defines文件下,但为了方便策划编写,excel类型定义文件也可以放到Datas目录。

import语法为:

  <import name="../Datas/__enums.xlsx" type="enum"/>

典型的enum文件格式如下:

excel_enum

表字段说明:

字段可空默认值说明
full_name类型全名,即可以是不包含命名空间,如 Hello,也可以包含命名空间如 item.Item
flagsfalse等价schema逻辑结构中isFlags字段
uniquefalse当前enum内的所有枚举值必须唯一,等价schema逻辑结构中isUniqueItemId字段
comment
tags填写方式为 key1=value1#key2=value2...
items枚举项列表

枚举项字段说明:

字段可空默认值说明
name枚举项名
alias别名
value枚举值
comment
tags同其他tags写法

bean类型定义文件

import语法为:

  <import name="../Datas/__beans.xlsx" type="bean"/>

典型的bean文件格式如下:

excel_bean

表字段说明:

字段可空默认值说明
full_name类型全名,即可以是不包含命名空间,如 Hello,也可以包含命名空间如 item.Item
parent父类名,如果名字不包含命名空间,会优先从当前命名空间找,再从全局命名空间找
valueTypefalse对应schema逻辑结构中isValueType字段
sep
aliasfalse
comment
group
tags
fields字段列表

字段定义的字段说明:

字段可空默认值说明
name
type
group
comment
tags

table类型定义文件

import语法为:

  <import name="../Datas/__tables.xlsx" type="table"/>

典型的table文件格式如下:

excel_table

表字段说明:

字段可空默认值说明
full_name类型全名,即可以是不包含命名空间,如 Hello,也可以包含命名空间如 item.Item
value_type表记录类型
read_schema_from_filefalse是否从input的excel文件的标题头行读取value_type定义。此时不能再定义value_type对应的bean,否则会出现定义重复的错误
input对应schema逻辑结构中inputFiles字段
index
mode
comment
group
tags
output对应schema逻辑结构中outputFileName字段

xml定义文件

由于xml天然可以填写不同结构的数据,因此xml文件不需要像excel文件那样区分类型,要求import的type属性未定义或者为空。

典型的xml定义文件如下:


<module name="item">

<enum name="Quality">
<var name="WHITE" alias=""/>
<var name="RED" alias=""/>
<var name="GREEN" alias="绿"/>
</enum>

<bean name="Item">
<var name="id" type="int"/>
<var name="count" type="int"/>
</bean>

<bean name="Item2">
<var name="id" type="int"/>
<var name="count" type="int"/>
<var name="desc" type="string"/>
</bean>

<table name="TbItem" value="Item" input="item.xlsx"/>
<table name="TbItem2" value="Item2" input="item2.xlsx"/>

<refgroup name="item.TbItem,item.TbItem2"/>

<enum name="AudioType">
<var name="UNKNOWN" value="0"/>
<var name="ACC" value="1"/>
<var name="AIFF" value="2"/>
<mapper target="client" codeTarget="cs-bin">
<option name="type" value="UnityEngine.AudioType"/>
</mapper>
</enum>
<bean name="vector2" valueType="1" sep=",">
<var name="x" type="float"/>
<var name="y" type="float"/>
<mapper target="client" codeTarget="cs-bin">
<option name="type" value="UnityEngine.Vector2"/>
<option name="constructor" value="ExternalTypeUtil.NewVector2"/>
</mapper>
</bean>

<module name="subModule">
<bean name="SubModuleType">
<var name="id" type="int"/>
<var name="count" type="int"/>
</bean>
<table name="TbSubItem" value="SubModuleType" input="submodule.xlsx"/>
</module>


</module>

module定义

字段名可选默认值描述
name命名空间名,可以为空。可以是多级命名空间,如a.b

mdoule中可以再定义子module,支持无限嵌套层级。

enum定义

字段名可选默认值描述
name类型名,不能包含命名空间
flagsfalse等价schema逻辑结构中isFlags字段
uniquefalse当前enum内的所有枚举值必须唯一,等价schema逻辑结构中isUniqueItemId字段
comment
tags填写方式为 key1=value1#key2=value2...

enum支持两种子元素:var和mapper。

var定义了枚举项的信息,格式如下:

字段可空默认值说明
name枚举项名
alias别名
value枚举值
comment
tags同其他tags写法

mapper定义了外部类型映射相关信息,具体含义请参照schema逻辑结构中文档,字段如下:

字段可空默认值说明
target为1-n个,以逗号','分割
codeTarget1-n个,以逗号','分割

mapper可包含0-n个option子元素,option格式如下: |字段|可空|默认值|说明| |-|-|-|-| |name|否||| |value|否|||

bean定义

字段可空默认值说明
name类型名,不能包含命名空间
parent父类名,如果名字不包含命名空间,会优先从当前命名空间找,再从全局命名空间找
valueTypefalse对应schema逻辑结构中isValueType字段
sep
aliasfalse
comment
group
tags

bean支持三种子元素:var、bean和mapper。

var定义了成员字段,定义如下:

字段可空默认值说明
name
type
group
comment
tags

bean定义了子结构,子结构的parent为上级bean,自动包含父类的所有字段,此时该子结构的parent字段会被自动忽略,子bean的定义方式与bean完全相同。 这种包含类型继承的结构为多态结构,尤其适合在技能、副本、AI中表达复杂GamePlay数据结构。

mapper定义了外部类型映射相关信息,与enum中mapper的定义方式完全相同,不再赘述。

table定义

字段可空默认值说明
name类型名,不能包含命名空间
value表记录类型
readSchemaFromFilefalse是否从input的excel文件标题头行中读取value定义。此时不能再定义value对应的bean,否则会出现定义重复的错误
input可以为多个,以逗号','分割,对应schema逻辑结构中inputFiles字段
index可以为多以,如果是联合主键,则以'+'分割,如果是独立主键,则以','分割
mode取one(或singleton)、map、list之一
comment
group
tags
output对应schema逻辑结构中outputFileName字段

refgroup

refgroup为DefaultSchemaCollector的语法糖,用于表示一组被ref引用的table,在schema逻辑结构中没有有对应的对象。格式如下:

字段可空默认值说明
name可以为1-n个值,以逗号','分割,每个值必须为table全名(如item.TbItem,item.TbItem2)