剖析某些大型游戏的框架,可以发现广泛运用了DataTable与DataAsset来管理数据,DataTable的导入直接用Excel就能很轻易的完成,但是DataAsset却要一直手动去填,当DataAsset有几百个时,哪怕通过引擎自带的Bulk Edit去调也是一个噩梦。

那么假如可以将DataTable结合DataAsset结合起来去填充DataAsset的数据,那么不香么?

结合了钊哥的数据驱动教程

数据驱动开发​www.bilibili.com

提供的将DataTable在编辑器中编辑的思路,我简易地实现了这个非常方便的功能。想直接看效果的可以看我的这个视频

UE4 C++结合DataTable批量快速创建DataAsset​www.bilibili.com


现在简要地说明一下实现流程

在阅读本文之前,假设你已经对DataTable和DataAsset已经有了初步的了解。

为了简单起见,本文不结合AssetManager在DataAsset中应用FPrimaryAssetType这个概念,读者有需要可以自行补充。

1.在c++中创建以FTableRowBase为父类的结构体

其余属性,读者自行填充

2.以该结构体为基准,在excel中填好数据,并将csv文件导入虚幻4,生成DataTable。(这一步的具体实现请参考官方文档有关教程

https://docs.unrealengine.com/zh-CN/Gameplay/DataDriven/index.html)

导入完成后在ue4中如下图所示

打开为

3.在c++中以UPrimaryDataAsset为父类创建自定义的DataAsset,其中ItemProperty是刚才创建的DataTable结构体。

/** Base class for all items*/

4.在c++中以UBlueprintFunctionLibrary为父类创建蓝图函数库

并创建CreateNewDataAsset函数

UCLASS

在cpp文件中的具体实现为(没错,就是标准的创建Asset的流程,注意必要时需要对DataTable结构体中的拷贝赋值运算符进行重载,防止浅拷贝)

void 

5.在ue4中创建编辑器工具蓝图

父类选择Editor Utility Object

首先读取DataTable中的内容

再将数据表中的数据读入DataAsset中,并注意路径末尾不能以/结尾,否则创建的DataAsset无法保存。(忽略下面Create New Data Asset 中的ItemType,如果不需要用AssetManager,就不需要在c++中设置这个形参)

Package Path可以进一步优化,否则只按上面的方式设置,在文件夹视图中,只会有一个UAsset。按下面的方式设置,UAsset就正常了(推荐按下面的方式)

设置好之后,编译,保存。

6.运行编辑器工具控件

就会快速生成一堆DataAsset

可以看到,DataTable中的数据,已经完全导入到DataAsset中了,这样再也不必手动设置DataAsset中的数据了,也非常方便管理DataAsset中的数据。

具体效果可以看我这个视频

UE4 C++结合DataTable批量快速创建DataAsset​www.bilibili.com

datatable如何生成级联数据_UE4 C++结合DataTable批量快速创建DataAsset相关推荐

  1. datatable如何生成级联数据_如何把Excel表数据批量生成条形码

    条形码属于一维条码,是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符,条形码的种类比较多,比如常用的Code128码,Code39码,Code93码,EAN-13码, ...

  2. datatable如何生成级联数据_通过源码分析Mybatis是如何返回数据库生成的自增主键值?...

    在Mybatis中,执行insert操作时,如果我们希望返回数据库生成的自增主键值,那么就需要使用到KeyGenerator对象. 需要注意的是,KeyGenerator的作用,是返回数据库生成的自增 ...

  3. datatable java排序,JSF数据表(h:dataTable)DataModel排序数据

    JSF中有一个叫作DataTable的控件,可用来渲染和格式化html表格.使用DataTable,我们可以迭代收集或数组数组来显示数据.下面我们来学习如何向DataTable使用DataModel排 ...

  4. 给DataTable中添加一行数据

    给DataTable中添加一行数据 一.如果该DataTable有两列,列的名称是Name,Age,且该DataTable的名称是dt; DataTable dt = new DataTable(); ...

  5. 清除datatable上的所有数据

    var curTable = dataSet.Tables[0];RemoveEmpty(curTable);//调用方法//清除datatable上的所有数据protected void Remov ...

  6. plsql视图添加表字段_教你不到两分钟,快速创建数据透视图

    如果说数据透视表给我们提供了灵活.快捷的数据计算工具, 那么数据透视图就是更直观.动态地展现大批量数据的变化规律和趋势. 数据透视图作为数据透视表中的重点内容,高阶的内容包括数据透视图的编辑.美化成高 ...

  7. badatatable转成json_C# DataTable 转换成JSON数据 三种方法

    在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List.DataTable转换为Json格式.特别在使用Extjs框架的时候,Ajax异步请求的数 ...

  8. C#中DataTable添加外部行数据

    大家都知道要使用DataTable的第一个Add方法,得先DataTable对象NewRow()出一行自己的数据,才能够添加行数据. 现在我发现了一个好方法使得DataTable能够生成表结构,并能添 ...

  9. 创建生成级联上级字符的函数

    需求:现有表dw,里面字段bm(编码),sj(上级编码), 新增字段px,要求在新字段中添加字符串,字符串为单位的级联上级及自身, 并从顶向下,从左到右排序,中间以"|"分割. 如 ...

最新文章

  1. 【原创】大叔经验分享(65)spark读取不到hive表
  2. mysql主备模型,MySQL数据同步【双主热备】
  3. 爬虫:通过滑动或者点触验证码的方法及实现(点触+滑动)
  4. oracle第一次使用语句创建作业失败记
  5. mysql5.7.25源码安装_源码编译安装 mysql5.7.25
  6. [转]Global exception handling in Web API 2.1 and NLog
  7. C++程序设计语言(特别版) -- 一个桌面计算器
  8. python求两数之和的命令_python计算两个数的百分比方法
  9. 使用ASP.NET Core和Entity Framework Core实现Angular 7 SPA CRUD
  10. 计算机大学等级评估,“计算机专业”学科评估,四所高校获A+评级
  11. 查看数值类型python_Python数据科学实践 | 数据类型
  12. Starship Troopers
  13. 全球化业务渐入佳境,BIGO盈利持续大幅提升,是时候重估欢聚集团
  14. 国内10个千年古镇 绝美春色洗涤你的眼
  15. 禁止在input中输入中文
  16. Windows server 2012R2 设置文件共享目录报错:无法连接到C$管理共享已验证文件夹xxx在计算机xxx上是否存在
  17. 宝德开开游戏云战略发布会在京瞩目召开
  18. win10开启键盘灯的步骤
  19. GQZL: 计算机网络(三)
  20. ecstore接口开发

热门文章

  1. 函数的初识;函数的返回值;函数的传参
  2. 使用FileZilla Server轻松搭建个人FTP服务器
  3. 给gridview动态生成radiobutton添加OnCheckedChanged监听函数
  4. Ubuntu8.04 LTS Hardy下的常用命令
  5. 全球项目多区域数据同步问题解决方案
  6. 返回content-length=0问题解决
  7. 【HTML】处理<br>换行符追加到前端换行无效的问题 --- html中渲染的字符串中包含HTML标签无效的处理方法,字符串中包含HTML标签被转义的问题 解决
  8. Win7 IIS7 HTTP 错误 404.2 - Not Found解决方法 ISAPI CGI
  9. ASP.NET + SqlSever 大数据解决方案 PK HADOOP
  10. flask from app import db ImportError: cannot import name ‘db’ 的解决方案