创建一个UObject子类,将需要配置的变量实现在其中,UClass中的两个设置可以自己更改,变量宏需添加config
#pragma once
#include "CoreMinimal.h"
#include "UObject/Object.h"
#include "CrashToolRuntimeSetting.generated.h"
/**
*
*/
UCLASS(Config = Engine , defaultconfig)
class CRASHTOOL_API UCrashToolRuntimeSetting : public UObject
{
GENERATED_BODY()
public:
UCrashToolRuntimeSetting(const FObjectInitializer& ObjectInitializer)
:Super(ObjectInitializer)
,bEnabled(false)
,Address("")
{}
UPROPERTY(EditAnywhere,Config,Category="CrashTool")
bool bEnabled;
UPROPERTY(EditAnywhere,Config,Category="CrashTool")
FString Address;
};
在模块加载时候注册他们,注册的位置填写一级一级的字符串而定
#pragma once
#include "CoreMinimal.h"
#include "Modules/ModuleManager.h"
class FCrashToolModule : public IModuleInterface
{
public:
/** IModuleInterface implementation */
virtual void StartupModule() override;
virtual void ShutdownModule() override;
private:
bool bEnableCrashTool;
FString Address;
};
#include "CrashTool.h"
#include "CrashToolOutputDevice.h"
#include "Misc/ConfigCacheIni.h"
#if WITH_EDITOR
#include "ISettingsModule.h"
#include "CrashToolRuntimeSetting.h"
#endif
#define LOCTEXT_NAMESPACE "FCrashToolModule"
void FCrashToolModule::StartupModule()
{
//RegisterSettings
#if WITH_EDITOR
ISettingsModule* SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>("Settings");
if (SettingsModule)
{
SettingsModule->RegisterSettings("Project", "Plugins", "CrashTool",
LOCTEXT("RuntimeSettingsName", "CrashTool"),
LOCTEXT("RuntimeSettingsDescription", "Project settings for CrashTool"),
GetMutableDefault<UCrashToolRuntimeSetting>()
);
}
#endif
效果如下
读取它们
#include "Misc/ConfigCacheIni.h"
//get config
check(GConfig);
//这里就是读取配置文件
if(!GConfig->GetBool(TEXT("/Script/CrashWindowsTest.CrashToolRuntimeSetting"), TEXT("bEnabled"), bEnableCrashTool, GEngineIni))
{
UE_LOG(CrashToolLog,Error,TEXT("GetConfigFiled : bEnabled"));
return;
}
if (bEnableCrashTool)
{
//这里也是
if (!GConfig->GetString(TEXT("/Script/CrashWindowsTest.CrashToolRuntimeSetting"), TEXT("Address"), Address, GEngineIni))
{
UE_LOG(CrashToolLog,Error,TEXT("GetConfigFiled: Address"));
return;
}
写入同理
GConfig->SetBool(TEXT("/Script/CrashWindowsTest.CrashToolRuntimeSetting"), TEXT("bEnabled"), true, GEngineIni);
GConfig->SetString(TEXT("/Script/CrashWindowsTest.CrashToolRuntimeSetting"), TEXT("Address"),"要写入的内容" , GEngineIni)
另一种更好的方法
继承UDeveloperSettings,使用宏标签,不用在模块启动时候注册,config = “自定义名称”的时候,该配置文件会单独ini,如下=Game的时候这个配置文件内容则存在game中,宏标签中defaultConfig决定了该配置文件是否在根路径下的config文件中,这个文件中的配置文件会被默认打包。
.h
UCLASS(config = Game, defaultconfig, meta = (DisplayName = "HttpMgrSetting"))
class HTTPDOWNLOADTOOL_API UHttpManagerSetting :public UDeveloperSettings
{
GENERATED_UCLASS_BODY()
public:
UPROPERTY(config, EditAnywhere, Category = "Config | HttpManager")
int32 MaxParallel;//最大的下载并行数
UPROPERTY(config, EditAnywhere, Category = "Config | HttpManager")
int32 MaxTryCount;//最大的重连次数
UPROPERTY(config, EditAnywhere, Category = "Config | HttpManager")
int32 RequestKBSize;//每个子任务的大小
UPROPERTY(config, EditAnywhere, Category = "Config | HttpManager")
float ResponseTimeout;//请求超时的时间
UPROPERTY(config, EditAnywhere, Category = "Config | HttpManager")
FString CurFilePath; //子文件的缓存位置
};
.cpp
// 构造函数
UHttpManagerSetting::UHttpManagerSetting(const FObjectInitializer& ObjectInitializer)
: MaxParallel(5)
, MaxTryCount(10)
, RequestKBSize(1024)
, ResponseTimeout(5.0f)
{
CurFilePath = FPaths::ProjectSavedDir() / TEXT("HttpCacheFiles");
}
//其他类使用他
void UHttpMgrSubsystem::Init()
{
const UHttpManagerSetting* Config = GetDefault<UHttpManagerSetting>();
this->MaxParallel = Config->MaxParallel;
this->MaxTryCount = Config->MaxTryCount;
this->RequestKBSize = Config->RequestKBSize;
this->ResponseTimeout = Config->ResponseTimeout;
this->CurFilePath = Config->CurFilePath;
}