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添加自定义配置文件信息 的相关文章

  • 如何在C++中生成非常大的随机数

    我想使用 C 生成 0 2 64 范围内的非常大的随机数 我已经使用了 rand 函数 但它没有生成非常大的数字 有人可以帮忙吗 使用c 11 使用标准c 11的随机库 http en cppreference com w cpp nume
  • 如何在 ASP.NET MVC 中将 XML 文件发送到客户端

    在 ASP NET MVC 中 我有一个数据库表 我想在某个视图页面上有一个按钮 如果某个用户单击该按钮 我的应用程序将生成包含数据库中所有行的 XML 文件 然后 应将包含 XML 的文件发送到客户端 以便用户看到下载弹出窗口 同样 我希
  • Qt/c++ 随机字符串生成[重复]

    这个问题在这里已经有答案了 我正在创建一个应用程序 需要生成多个随机字符串 几乎就像一个由一定长度的 ASCII 字符组成的唯一 ID 这些字符混合有大写 小写 数字字符 有没有 Qt 库可以实现这一点 如果没有 在纯 C 中生成多个随机字
  • C# 中类似图的实现

    所以我有一个对象 我们称之为 Head 它有一个对象列表 C C1 C2 C3 T T1 T2 和 M M1 M2 并且所有这些都是相互关联的 例如 Head gt C1 C2 C3 T1 T2 M1 M2 T1 gt C1 C2 T2 g
  • 对 ExecuteNonQuery() 的单次调用是原子的

    对 ExecuteNonQuery 的单次调用是否是原子的 或者如果单个 DbCommand 中有多个 sql 语句 那么使用事务是否有意义 请参阅我的示例以进行说明 using var ts new TransactionScope us
  • 如何通过 libwebsocket 发送异步数据?

    我正在将 Warmcat 的 libwebsocket C 库用于小型 Websocket 服务器 我已经启动并运行了这些示例 并且可以发送数据以响应从 websocket 接收数据 例如回显发送的反向字节 但是 我无法弄清楚如何在不使用
  • 预编译头和 Visual Studio

    有没有办法设置 Visual Studio 解决方案参数 以便它只创建预编译头而不构建整个解决方案 具体来说 它是一个巨大的 C 解决方案 本身有许多项目 谢谢 仅选择 pch 创建者源文件 通常是 stdafx cpp 然后编译该文件 C
  • 如何从不同的线程访问控件?

    如何从创建控件的线程以外的线程访问控件 避免跨线程错误 这是我的示例代码 private void Form1 Load object sender EventArgs e Thread t new Thread foo t Start p
  • 从内存流播放视频文件

    只是好奇看看这是否可能 我有一个 Windows 应用程序 它从我的电脑上的 avi 文件读取所有字节 然后将其存储在 byte 中 现在我的内存中有 avi 文件 我想直接从内存将其加载到某种视频播放器控件中 我尝试过使用 wmplaye
  • C# 中的抽象类和接口类有什么不同?

    C 中的抽象类和接口类有什么不同 An 接口不是类 它只是一个contract定义了public一个类的成员must实施 抽象类只是一个类 您从中可以cannot创建一个实例 通常您会使用它来定义一个基类 该基类定义了一些virtual方法
  • FluentAssertions ShouldNotThrow 无法识别异步方法/Func

    我正在尝试检查异步方法是否抛出具体异常 为此 我使用 MSTEST 和 FluentAssertions 2 0 1 我已经检查过这个关于 Codeplex 的讨论 http fluentassertions codeplex com wo
  • 原子存储抛出错误

    我最近升级到了 C 11 兼容编译器 并且尝试将一些代码从 boost 更新到 c 11 标准 我在使用atomic store转换一些代码时遇到了问题 这是一些简单的测试代码 似乎会引发编译器错误 int main std shared
  • 检查两个函数或成员函数指针的签名是否相等

    我编写了一些代码来检查自由函数的签名是否等于成员函数的签名等 它比较提取的返回类型和函数参数 include
  • 从 C# 调用时无法识别 Powershell 命令

    这是这个的延续Question https stackoverflow com questions 66280000 powershell object returns null 66280138 noredirect 1 comment1
  • 调试错误:在 vc++ 项目中使用 COM 时发生 所需的运行时?

    我为我的工作创建了一个 COM 组件 我也注册了该组件 在我的系统上 我有两个虚拟机工作站 在我的第一个工作站中 它运行良好 在我的第二个工作站中 它显示一个包含消息的错误框该程序需要一段时间并以不寻常的方式关闭 请联系应用程序管理员 我认
  • 基础设施 - 同步和异步接口和实现? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在实现库 基础设施时 并且该 API 的用户希望同步和异步使用代码 我读到混合同步和异步并不是一个好主意 例如 同步实现包括等待异步实现 显然
  • 为什么 C++ 标准没有将 sizeof(bool) 定义为 1?

    Size of char signed char and unsigned char由 C 标准本身定义为 1 个字节 我想知道为什么它没有定义sizeof bool also C 03 标准 5 3 3 1 说 sizeof char s
  • C# PasswordDeriveBytes:似乎 Salt 并不重要

    可能我误解了什么 以下代码通过 CryptDeriveKey 使用两种不同的盐生成两个相等的密钥 这是控制台结果 盐1 21 3e 18 a3 9a 8b 5f gt 键 da 89 ea 3d 91 08 20 98 20 e9 dc 4
  • 检查一个数是否是完全平方数?

    我认为以下代码存在精度问题 bool isPerfectSquare long long n long long squareRootN long long sqrt n 0 5 return squareRootN squareRootN
  • 强制函数调用的顺序?

    假设我有一个抽象基类 并且我想要一个必须由派生类实现的纯虚方法 但我想确保派生方法以特定顺序调用函数 我可以做什么来强制执行它 I E base class virtual void doABC 0 virtual void A 0 vir

随机推荐