Unity技术分享Unity游戏开发入门

[项目组] 配置表解析升级指南

2016-12-21  本文已影响149人  苏三疯
ORM.png

目的与好处

迁移代价

操作细则:

DriverLicenseVo, SeasonRankInfo为例: DriverLicenseConfig.xml, rank_match.xml

1.配置类继承 DBaseInfoDUniqueInfo, 使用特性[TableFile]
// 无唯一ID
[TableFile(Name = "DriverLicenseConfig.xml")]
public class DriverLicenseVo : DBaseInfo
// 有唯一ID, 需要填写PK(主键)字段的名词, 对应xml中某唯一列
[TableFile(PK = "Rank", Name = "rank_math.xml")]
public class SeasonRankInfo : DUniqueInfo
#特性说明:
- PK: 主键名
- Name: 配置文件全名
#基类说明:
- DBaseInfo: 无唯一列的数据类继承
- DUniqueInfo: 有唯一列的数据类继承, 需要填写PK列名
2.特殊需求

类型处理不能满足:

#DriverLicenseVo.cs
// 原始数据需要拼接一段字符串, 才进行枚举转换"License"
[TableColumn(Name = "driverLevel")]
private string _driverLevel
 {
      set { driverLevel = (DriverLevelType)Enum.Parse(typeof(DriverLevelType), "License" + value); } 
}
// 驾照等级
public DriverLevelType driverLevel = DriverLevelType.None;
3.配置类修改说明
# DriverLicenseVo.cs
    // 驾照标题
    public string title = null;
    <item ... title="新手教程" ...></item>
    title大小写完全一致最省事, 什么都不用配置
# SeasonRankInfo.cs
    // 段位描述
    [TableColumn(Name = "Describe")]
    public string des = string.Empty;
    <item ... Describe="青铜" ...></item>
    特别注意xml中存在英文单词拼写错误, 导致与类中字段名不一致的情况
# DriverLicenseVo.cs
    [TableColumn(Sp = ",")]
    // 机器人名称
    public string[] robotNames = null;
  // 上面配置相当于旧代码:
    vo.robotNames = table["robotNames"].ToString().Split(',');
4.加载代码添加泛型参数:
LoadConfig<DriverLicenseVo>(...);
LoadConfig<SeasonRankInfo>(...);
LoadConfig<SectionIndexTableVo>(ConfigPath.PVE_CONFIG, "SectionName", LoadMode.NetFirst);

SectionName 就是多表中的子节点名, 一张表有多少个子表, 就要写几行, 只是类名不同, 子表名称不同

4.XmlOperation中xml转vo的代码, 修改为
参考 XmlOperation.LoadXMLDriveringLicenseCofing:
// 获取整个表格List
List<DriverLicenseVo> vos = TableReader.GetInfos<DriverLicenseVo>();
参考 XmlOperation.LoadXMlMatchRankInfo:
// 根据id获取单条记录 [继承DUniqueInfo才能使用此API]
DriverLicenseVo vo = TableReader.GetInfo<DriverLicenseVo>(id);

整理过程如遇到困难, 需要扩展功能, 欢迎提出需求。

上一篇 下一篇

猜你喜欢

热点阅读