UE4 C++ 个人学习笔记之 DataTable的四种加载方式
前言:
在笔者看来,由于诸多原因,通过自学的方式学习UE4 C++是一个非常困难、远比学习蓝图要困难许多的过程,很多东西都需要自己去摸索,去试错。
笔者留下这篇笔记,一方面是为了加固自身的记忆,另一方面是为了让看到这篇笔记的人少走一些弯路。
才学尚浅,如果有错误欢迎指出,如果有什么交流学习群的话,请务必拉我进去。以上。
目录:
一、通过 UPROPERTY宏 将对象暴露至蓝图中
二、通过ConstructorHelper 在构造方法中加载 DataTable
三、当需要某种操作DataTable工具类时,可以考虑StaticLoadObject方法
四、通过继承UDeveloperSettings类,以 Edit - Project Settings 的方式灵活配置数据表

一:通过 UPROPERTY宏 将对象暴露至蓝图中

二:通过ConstructorHelper 在构造方法中加载 DataTable
注意事项:必须要在构造函数中使用 ConstructorHelpers。
此外 如果会出现工程打开时卡死在75%的情况,很大可能就是因为使用了ConstructorHelper。或者把 项目目录下的Intermediate文件夹给删了
据说原因是:当其蓝图子类也试图对ConstructorHelper生成的对象进行操作时,会出现循环调用的情况 。因此完全不建议在构造方法中对数据表进行操作,
即任何对数据表的读写操作都应该在BeginPlay之后。
缺点是路径写死了,不便修改,也就是所谓的 硬代码。但一般情况下都会选择这种方法。

三:当需要某种操作DataTable工具类时,可以考虑StaticLoadObject方法
2023.03.07 更新
对于该段内容中的 DataTable加载方式进行更新。
我们可以使用static variable 以保证该DataTable仅需要被加载一次,以防止内存浪费。
注 “static UDataTable* LoadedDataTable = nullptr;” 这行代码仅会在游戏开始时被执行一次。

四:通过继承UDeveloperSettings类,以 Edit - Project Settings 的方式灵活配置数据表
第一步:打开 项目目录/config/DefaultGame.ini 添加以下配置
第二步:创建UDeveloperSettings的子类,该类将会在编译之后首次初始化。
第三步:创建UGameInstanceSubsystem的子类,在类中重写 Initialize方法。该类将会在游戏开始后首次初始化。

编译之后打开 项目设置,指定所需的DataTable
(由于已经在DefaultGame中指定了路径,这里其实可以不指定直接重启项目,再打开时就能直接拿到数据表。)
即我们可以直接在DefaultGame.ini中,以配置的方式对数据表进行管理!需要重启项目!十分强大!!!超级强大!!!

第四步:在项目任何地方,可以通过该类直接获取所需数据表(需要在BeginPlay之后)
注:本方法参考来源请于英文搜索引擎搜索:
Easily Add ‘Editor & Project Settings’ to Unreal Engine (.INI)
尾声:
任何对于数据表中数据的获取,应当在游戏开始之后,目前我是这么认为的(以后就不好说了)
在C++中有等价于蓝图ConstructionScript 的 AActor::OnConstruction方法 ,该方法在构造方法之后,BeginPlay之前,理论上是可以对 除最后一种方法以外 的另外三种方法获取的数据表进行访问,但仍然不建议这么做。