前言
在上一篇(16——DeveloperSettings(开发者设置)的基本使用——创建配置文件)基础上继续介绍如何在C++中读取修改Settings。
步骤
一、获取配置项的值
1. 在“SampleSettings.h”中新增声明名为“AppID”和“AppKey”的变量,其中UPROPERTY
宏中的参数Config
表示这两个成员变量会参与到项目的配置管理中,其值可被保存到项目配置文件中并在需要时重新加载出来。
此时编译后可以看到在“项目设置-》Test-》Sample Settings”中多了两个配置项
接下来我们在另一个Actor中获取和修改配置项“AppID”和“AppKey”的值
2. 新建一个Actor类,这里命名为“ConfigActor”
在“ConfigActor.h”中定义一个名为“GetMyAppKey”的函数,用于获取配置项“AppKey”的值
函数“GetMyAppKey”的实现如下,该函数将获取到的配置项“AppKey”的值赋给引用参数 OutMyAppKey
。如果成功获取到有效的 AppKey
,函数返回 true
;若获取实例失败或者实例中 AppKey
变量无值,则将 OutMyAppKey
设置为默认值 "None"
并返回 false
。
3. 编译后创建派生自“ConfigActor”的蓝图类“BP_ConfigActor”
打开“BP_ConfigActor”,在事件BeginPlay时打印“OutMyAppKey”
4. 将“BP_ConfigActor”拖入视口
5. 在项目设置中,修改配置项“AppKey”的值
此时运行,可以看到成功打印了配置项“AppKey”的值
配置文件“DefaultSampleSetting.ini”中也成功记录了配置项“AppKey”的值。
另外,蓝图提供了可以访问配置项的节点“GetClassDefault”
二、修改配置项的值
在“ConfigActor.h”中新增一个函数“SetMyAppKey”,用于设置配置项“AppKey”的值。函数“SetMyAppKey”接收一个 FString
类型的常量引用参数 InMyAppKey,
该参数表示要设置的新的AppKey的值。
函数“SetMyAppKey”的实现如下。先尝试获取对应的 USampleSettings
类实例,如果获取成功,就将传入的新应用密钥值赋给该实例中的 AppKey
变量,并且函数返回 true
表示设置成功;若获取实例失败,则直接返回 false。
编译后在“BP_ConfigActor”的事件图表中调用“SetMyAppKey”
运行后,可以看到项目设置中的配置项“AppKey”的值被修改了
但是修改后的值并没有保存到“DefaultSampleSettings.ini”中
我们还需要添加如下3行代码,将项目设置中的配置项信息保存到配置文件中 。其中调用 SampleSetting->Modify()
是为了标记当前的 USampleSettings
实例中的配置已经被修改,通过调用这个函数告知系统该实例的配置状态发生了变化,后续在保存配置时会根据这个标记来确定哪些配置信息需要被持久化存储,确保只有真正修改过的配置才会被保存,避免不必要的存储操作;
FString ConfigPath = FPaths::ConvertRelativePathToFull(FPaths::ProjectConfigDir() / TEXT("DefaultSampleSettings.ini"));
这行代码用于获取配置文件的完整路径,FPaths::ProjectConfigDir()
用于获取项目配置目录的路径,然后通过 /
运算符(在UE中重载了用于拼接路径的功能)与 TEXT("DefaultSampleSettings.ini")
进行拼接,得到配置文件相对的路径表示,最后FPaths::ConvertRelativePathToFull
函数将相对路径转换为完整的绝对路径;
SaveConfig
函数是 USampleSettings
类提供的用于保存配置信息的方法,参数 CPF_Config
是一个配置文件保存的相关标志,第二个参数 *ConfigPath
通过解引用操作将之前获取到的配置文件的完整路径字符串传递进去,使得配置信息能够准确地保存到指定的 DefaultSampleSettings.ini
文件中,确保更新后的“AppKey”信息得以持久化。
编译后,此时运行可以看到不仅项目设置中的配置项“AppKey”的值被成功修改,而且修改后的值也成功保存到配置文件中。