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