目录
1 新建一个C++类
这个类需要继承自UObject,显然也可以继承UObject的子类。其次要使用UCLASS宏添加config = Game说明符,本文为了使用蓝图调试,同是也加上Blueprintable说明符。如下图所示:
UCLASS(Blueprintable, config = Game)
class UECESIUMEX_TAIWAN_API UDTIS_ConfigFile : public UObject
{
GENERATED_BODY()
}
2 定义需要存储的成员变量
同样的需要存储的变量也要在UPROPERTY宏中加上Config说明符。如下图所示:
public:
UPROPERTY(BlueprintReadWrite, Config)
float ExampleVariable;
3 设置自定义配置文件路径
在类中声明一个成员变量,用于存储路径。
private:
FString ConfigPath;
UDTIS_ConfigFile::UDTIS_ConfigFile()
{
// 自定义配置文件目录
ConfigPath = FPaths::ProjectDir() / TEXT("Settings/Custom.ini");
}
ProjectDir()函数返回的路径是.uproject文件那一级目录,Settings是自定义文件夹名字,Custom.ini是自定义config文件名
4 将变量存储到文件中
自定义一个函数SaveCustomConfig,函数实现如下图所示:
void UDTIS_ConfigFile::SaveCustomConfig()
{
SaveConfig(CPF_Config, *ConfigPath);
GConfig->Flush(false, ConfigPath);
UE_LOG(LogTemp, Warning, TEXT("SaveCustomConfig"));
}
5 修改config文件中的值来修改变量的值
自定义一个函数LoadCustomConfig,将配置文件中的值设置给变量,函数实现如下图所示:
void UDTIS_ConfigFile::LoadCustomConfig()
{
GConfig->Flush(true, ConfigPath);
ReloadConfig(this->GetClass(), *ConfigPath);
UE_LOG(LogTemp, Warning, TEXT("LoadCustomConfig"));
}
6 验证结果
6.1 存储config文件
在关卡蓝图中,使用Construct Object From Class函数实例化DTIS_ConfigFile对象(在UCLASS宏中加上Blueprintable说明符才能被蓝图使用,不然编译会报错),将ExampleVariable值修改为100,然后调用SaveCustomConfig进行测试。最后打开Custom.ini文件,文件中变量的值为100.
6.2 读取config文件
手动修改config文件中变量的值,然后读取并打印出来。
7 代码总结
- .h头文件内容:
UCLASS(Blueprintable, config = Game)
class UECESIUMEX_TAIWAN_API UDTIS_ConfigFile : public UObject
{
GENERATED_BODY()
public:
UDTIS_ConfigFile();
UFUNCTION(BlueprintCallable)
void LoadCustomConfig();
UFUNCTION(BlueprintCallable)
void SaveCustomConfig();
UPROPERTY(BlueprintReadWrite, Config)
float ExampleVariable;
private:
FString ConfigPath;
};
- .cpp文件内容:
UDTIS_ConfigFile::UDTIS_ConfigFile()
{
// 自定义配置文件目录
ConfigPath = FPaths::ProjectDir() / TEXT("Settings/Custom.ini");
}
void UDTIS_ConfigFile::LoadCustomConfig()
{
GConfig->Flush(true, ConfigPath);
ReloadConfig(this->GetClass(), *ConfigPath);
UE_LOG(LogTemp, Warning, TEXT("LoadCustomConfig"));
}
void UDTIS_ConfigFile::SaveCustomConfig()
{
SaveConfig(CPF_Config, *ConfigPath);
GConfig->Flush(false, ConfigPath);
UE_LOG(LogTemp, Warning, TEXT("SaveCustomConfig"));
}