内容概括
本篇将在一个空白插件中创建一个配置(并非必须要在插件中创建,直接在项目中创建也可以),该配置可在编辑器中打开。 之后,使用两种方法来在代码中读取配置的内容。
配置文件的官方文档为:Configuration Files | Unreal Engine Documentation
步骤0. 创建空白插件
以Blank为模板创建插件。
步骤1. 创建配置的UObject
定义一个配置对应的UObject,需要注意的是需要在UCLASS宏 中有Config ,其值就是配置文件ini的名字:
#pragma once
#include "CoreMinimal.h"
#include "MyTestConfig.generated.h"
UCLASS(Config = yaksue)
class UMyTestConfig : public UObject
{
GENERATED_UCLASS_BODY()
public:
UPROPERTY(Config, EditAnywhere)
bool test1;
UPROPERTY(Config, EditAnywhere)
FString test2;
UPROPERTY(Config, EditAnywhere)
FColor test3;
};
对应cpp文件不需额外处理,只要实现构造函数就行了:
#include"MyTestConfig.h"
UMyTestConfig::UMyTestConfig(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
}
步骤2. 注册配置
随后,需要在模块的启动函数中注册这个配置。不过首先要先include负责这个行为的模块,以及刚才定义UObject的文件:
#include "ISettingsModule.h"
#include "MyTestConfig.h"
注册的代码:
if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr< ISettingsModule >("Settings"))
{
SettingsModule->RegisterSettings(
"Project",
"Plugins",
"YakSue",
LOCTEXT("YaksueConfig", "YaksueConfig"),
LOCTEXT("YaksueConfigDescription", "YaksueConfigDescription"),
GetMutableDefault< UMyTestConfig >());
}
其中RegisterSettings 有很多参数,其意义是:
- ContainerName:指定是在编辑器中的 “Project” 还是 “Editor”。
- CategoryName:编辑器中的分类。
- SectionName
- DisplayName:编辑器中显示的名字。
- Description:鼠标悬停在编辑器中的名字上浮现的提示。
- SettingsObject:配置所对应的UObject
随后,在编辑器中就可以在 Project Settings 的 Plugins 分栏下看到名为 YaksueConfig 的配置: 修改一些属性后,将可以看到对应内容被存到了项目文件夹\Saved\Config\Windows\yaksue.ini中:
[/Script/TestPlg.MyTestConfig]
test1=False
test2=jojo
test3=(B=218,G=202,R=255,A=0)
读取配置的方式:GetDefault
使用GetDefault<配置对应的UObject类型>() 可以获得配置的UObject。 比如:
FString data = GetDefault<UMyTestConfig>()->test2;
读取配置的方式:配置文件层级
上面方式的一个缺点是,使用时需要知道那个UObject的定义。 而通过“配置文件层级”则不需要(关于“配置文件层级”的概念可看官方文档) 比如,当前层级就是:
[/Script/TestPlg.MyTestConfig]
为了方便,我在尝试这种方式时,将存储的ini文件改成一个引擎知道的ini文件,比如Engine :
UCLASS(Config = Engine)
现在,当修改属性时,可以在 \Saved\Config\Windows\Engine.ini 看到与之前相同的内容了。 而读取时的代码为:
FString data;
GConfig->GetString(TEXT("/Script/TestPlg.MyTestConfig"), TEXT("test2"), data, GEngineIni);
函数的最后一个参数就是配置文件,比如GEngineIni 的值就是绝对路径\Saved\Config\Windows\Engine.ini
|