内容概括
本篇将在一个空白插件中创建一个配置(并非必须要在插件中创建,直接在项目中创建也可以),该配置可在编辑器中打开。
之后,使用两种方法来在代码中读取配置的内容。
配置文件的官方文档为:Configuration Files | Unreal Engine Documentation
步骤0. 创建空白插件
以Blank为模板创建插件。
步骤1. 创建配置的UObject
定义一个配置对应的UObject,需要注意的是需要在UCLASS宏
中有Config
,其值就是配置文件ini的名字:
#pragma once
#include "CoreMinimal.h"
#include "MyTestConfig.generated.h"
//配置对应的UObject:
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"
注册的代码:
//获得 ISettingsModule 模块并注册配置
if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr< ISettingsModule >("Settings"))
{
SettingsModule->RegisterSettings(
"Project", //ContainerName
"Plugins", //CategoryName
"YakSue", //SectionName
LOCTEXT("YaksueConfig", "YaksueConfig"), //DisplayName
LOCTEXT("YaksueConfigDescription", "YaksueConfigDescription"), //Description
GetMutableDefault< UMyTestConfig >()); //SettingsObject
}
其中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