UE4添加自定义配置文件信息

2023-11-01

创建一个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;
}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UE4添加自定义配置文件信息 的相关文章

随机推荐