|
UE4配置文件简介
版本:4.27
配置文件是用于项目加载时初始化变量的默认值。官方说明:https://docs.unrealengine.com/4.27/zh-CN/ProductionPipelines/ConfigurationFiles/
配置文件是为了让程序出厂后还能进行一些配置,而不用修改源代码。关于配置文件的详细解释:https://en.wikipedia.org/wiki/INI_file
UE4配置文件作用原理,见大佬博客,《Exploring in UE4》配置文件详解[原理分析]:https://zhuanlan.zhihu.com/p/34397162
UE4常用的配置文件名为XXX.ini,以键值对的形式存在,格式如下:
[Section]
Key = Value
...
[Section2]
Key2 = Value2
...比如最常见的Input配置文件DefaultInput.ini中的内容如下:
[/Script/Engine.InputSettings]
-AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f))
+AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False))
...UE4中键值对前可添加特殊字符,会产生不同的行为:
- + 如果该属性不存在,则添加一行
- - 删除一行,需要精确匹配
- . 添加一个新属性,可能会添加重复的行
- ! 删除一个属性;但您不必提供精确匹配,而只需提供属性的名称
保存目录
通常,一个新的项目会创建DefaultEngine.ini、DefaultGame.ini、DefaultEditor.ini、DefaultInput.ini等配置文件。对项目而言,UE4 的配置文件保存在 Config目录下,但你会发现项目中有两个Config文件夹,它们的目的各不相同:
- [ProjectDirectory]/Config:文件夹保存与项目相关的配置,比如各种DefaultXXX.ini配置文件。
- [ProjectDirectory]/Saved/Config:文件夹中保存与项目和平台相关的配置。
- 在Shipping打包模式下,能让用户进行配置的ini文件将在用户目录\AppData\Local\[Project]\Saved\Config\中。
引擎中的配置文件说明
除了通过直接打开XXX.ini文本进行编辑外,打开项目设置编辑页面可查看和编辑配置文件。
如上图所示,该配置项更改了以下类UInputSettings的变量默认值:
UClASS(config=Input, defaultconfig)
class ENGINE_API UInputSettings : public UObject
{
...
UPROPERTY(config, EditAnywhere, Category = "Mobile")
uint8 bEnableGestureRecognizer:1;
...
}
需要使用配置文件的类,需要在类上添加UCLASS(Config=ConfigName),此外,还有可选的UCLASS说明符:
- Config=ConfigName:ConfigName决定了配置文件名([ConfigName].ini或Default[ConfigName].ini),也决定了配置Category(如果使用UE中已有的ConfigName,会分类到Engine、Game等6个之中,如果使用自定义的ConfigName,则会创建新的配置Category)
- defaultconfig:在默认的配置文件中存储,即Default[ConfigName].ini文件保存配置,如果没有该配置文件则会创建
- perObjectConfig:对每个实例进行配置
- configdonotcheckdefaults:表示这个类对应的配置文件不会检查XXX层级上层的DefaultXXX配置文件是否有该信息,就直接存储到Saved目录下
另外,还需要在需要配置变量上添加:UPROPERTY(Config, Category = VariableCategoryName)
- 变量的Category与配置的Category不是相同的概念
- 配置文件的值将替换CDO(class default object)的值,其中CDO是UClass创建的类默认对象
- UCLASS说明符和UPROPERTY说明符都可被继承,但是子类可以覆盖父类的值。
访问配置变量也是通过CDO来访问,比如在代码其它地方使用该配置变量:
bool ConfigValue = GetDefault<UInputSettings>()->bEnableGestureRecognizer;
其它注意事项:
- 引擎读取配置文件有顺序,引擎特定->项目特定->平台特定,后面的值会覆盖前面的值。
添加自定义配置项和配置文件
方式一:继承自UDeveloperSettings(推荐)
如果需要类似于GameSettings的配置类,使用这种方式是最好的。可参考UE源码中的UAssetManagerSettings.h。该方式可以显式指定CategoryName和SectionName。
//UAssetManagerSettings.h
UCLASS(config = Game, defaultconfig, ...)
class ENGINE_API UAssetManagerSettings : public UDeveloperSettings
{
...
/** List of asset types to scan at startup */
UPROPERTY(config, EditAnywhere, Category = &#34;Asset Manager&#34;)
TArray<FPrimaryAssetTypeInfo> PrimaryAssetTypesToScan;
...
}
方式二:通过ISettingsModule模块注册
该方式可以对任意的UObject类使用,注意ISettingsModule只能在编辑器模块使用,注意添加WITH_EDITOR宏。
适用于给编辑器插件添加配置文件。引擎中GameplayTagsEditorModule模块可参考:
//GameplayTagsEditorModule.cpp
...
//StartupModule()函数中
if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>(&#34;Settings&#34;))
{
SettingsModule->RegisterSettings(&#34;Project&#34;, &#34;Project&#34;, &#34;GameplayTags&#34;,
LOCTEXT(&#34;GameplayTagSettingsName&#34;, &#34;GameplayTags&#34;),
LOCTEXT(&#34;GameplayTagSettingsNameDesc&#34;, &#34;GameplayTag Settings&#34;),
GetMutableDefault<UGameplayTagsSettings>());
}
...
//ShutdownModule()函数中
if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>(&#34;Settings&#34;))
{
SettingsModule->UnregisterSettings(&#34;Project&#34;, &#34;Project&#34;, &#34;GameplayTags&#34;);
}
...
方式三:使用GConfig对象及SaveConfig、LoadConfig函数
适用于对引擎的配置文件系统进行深度定制,比如需要实时反应配置文件的更改。有需求自己去研究吧。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|