HuldaGnodim 发表于 2022-5-27 10:40

UE4使用和添加配置文件

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,以键值对的形式存在,格式如下:

Key = Value
...


Key2 = Value2
...比如最常见的Input配置文件DefaultInput.ini中的内容如下:

-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文件夹,它们的目的各不相同:

[*]/Config:文件夹保存与项目相关的配置,比如各种DefaultXXX.ini配置文件。
[*]/Saved/Config:文件夹中保存与项目和平台相关的配置。
[*]在Shipping打包模式下,能让用户进行配置的ini文件将在用户目录\AppData\Local\\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决定了配置文件名(.ini或Default.ini),也决定了配置Category(如果使用UE中已有的ConfigName,会分类到Engine、Game等6个之中,如果使用自定义的ConfigName,则会创建新的配置Category)
[*]defaultconfig:在默认的配置文件中存储,即Default.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 = "Asset Manager")
    TArray<FPrimaryAssetTypeInfo> PrimaryAssetTypesToScan;
    ...
}
方式二:通过ISettingsModule模块注册

该方式可以对任意的UObject类使用,注意ISettingsModule只能在编辑器模块使用,注意添加WITH_EDITOR宏。
适用于给编辑器插件添加配置文件。引擎中GameplayTagsEditorModule模块可参考:
//GameplayTagsEditorModule.cpp
...
//StartupModule()函数中
if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>("Settings"))
{
    SettingsModule->RegisterSettings("Project", "Project", "GameplayTags",
                                     LOCTEXT("GameplayTagSettingsName", "GameplayTags"),
                                     LOCTEXT("GameplayTagSettingsNameDesc", "GameplayTag Settings"),
                                     GetMutableDefault<UGameplayTagsSettings>());
}
...
//ShutdownModule()函数中
if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>("Settings"))
{
    SettingsModule->UnregisterSettings("Project", "Project", "GameplayTags");
}
...
方式三:使用GConfig对象及SaveConfig、LoadConfig函数

适用于对引擎的配置文件系统进行深度定制,比如需要实时反应配置文件的更改。有需求自己去研究吧。
页: [1]
查看完整版本: UE4使用和添加配置文件