Unity Game FrameWork—模块使用—数据表

官方说明:可以将游戏数据以表格(如 Microsoft Excel)的形式进行配置后,使用此模块使用这些数据表。数据表的格式是可以自定义的。

数据表编写

前面实体的调用以及实体的属性配置用到的就是数据表,但是并没有做过多了解,这里具体说一下使用。
数据表是将excel数据转换为txt,然后游戏去读取这些数据,数据包括实体的生命值、防御力、攻击力、实体对应的特效id、死亡音乐id等各种数据关系表。
[图片]
表格需保存为Unicode文本(*.txt)格式
[图片]
txt的编码格式,搜索其他文章或博客有提到,需用UTF-8编码格式。我没有改,使用UTF-16Little Endian编码(UTF16-LE)也是可以的。
[图片]
Demo中数据表放在AssetUtility类的路径配置中,需传入文件名及后缀类型(类型为true,false)
[图片]

解析数据表DR类

数据表编写完成后,接下来就是解析数据表。解析数据表的类,不用自己手写,是工具生成的,入口如下图
[图片]
点击后即可生成数据表的bytes文件以及解析类“DR+表名”,代码入口如下。
[图片]
跳转后即可看到脚本名的组成方式,这里只需知道是怎么来的,至于如何生成脚本,后续再研究。
[图片]
加载读取数据时,DataTableExtension脚本里同样在加了DR前缀。
[图片]
大概看一下解析数据表的内容,与数据表里的属性是一一对应的。
[图片]

数据表加载读取

加载读取代码在ProcedurePreload流程里,代码如下:

public static readonly string[] DataTableNames = new string[]
{
    
    
    "Aircraft",
    "Armor",
    "Asteroid",
    "Entity",
    "Music",
    "Scene",
    "Sound",
    "Thruster",
    "UIForm",
    "UISound",
    "Weapon",
};
private void PreloadResources()
{
    
    
    // Preload data tables
    foreach (string dataTableName in DataTableNames)
    {
    
    
        LoadDataTable(dataTableName);
    }
}
private void LoadDataTable(string dataTableName)
{
    
    
    string dataTableAssetName = AssetUtility.GetDataTableAsset(dataTableName, true);
    m_LoadedFlag.Add(dataTableAssetName, false);
    GameEntry.DataTable.LoadDataTable(dataTableName, dataTableAssetName, this);
}

首先通过字符串数组罗列了需要加载的数据表类型,然后循环遍历加载到框架里。
数据加载方式如下,获取到对应数据表后,须通过TypeID(即表中的ID编号)来获取某一行的数据。
IDataTable dtAircraft = GameEntry.DataTable.GetDataTable();
DRAircraft drAircraft = dtAircraft.GetDataRow(TypeId);
[图片]
Entity实体部分,有一部分实体数据是动态随机生成或游戏运行时生成,或者是与其他数据表进行的组合,这一块可以根据数据逻辑扩展。
[图片]

猜你喜欢

转载自blog.csdn.net/qq_37619255/article/details/129829566
今日推荐