配置文件可用于加载项目时初始化属性。以分段排列的键值对(Key-Value)存储。单个给定Key可以与一个或多个Value相关联。
引擎配置文件用于对象和变量的默认值。用户输入配置可用于键绑定。当使用 项目向导 创建新的空白项目时,将创建 DefaultEngine.ini 和 DefaultGame.ini 。如果需要,以模板创建的新项目还可以生成 DefaultEditor.ini 和 DefaultInput.ini 。
可以在带有 “Config” 类说明符的类上调用 SaveConfig() 函数,它会将标有 “Config” 属性说明符的所有属性保存到适当的配置文件中。通常,由 SaveConfig() 保存的变量位于分段标题中,其格式为[(package).(classname)]。如:DefaultEngine.ini中的 [/Script/Engine.Engine] 分段指向Engine模块中的Engine类。
1、指定可配置变量
为了指定从配置文件中读入的变量,包含这些变量的类必须首先在其UCLASS宏中提供配置说明符。
UCLASS(Config=Game)
class UE4_LEARN_API ATestConfigActor : public AActor
必须为Config说明符指定一个类别(如:Game)。这决定了从哪个配置文件读取和保存该类的变量。FConfigCache.ini中定义了所有的 可能的类别。有关所有配置文件类别的列表,将在下面 配置类别 中介绍。
用Config说明符修饰类只表明该类可以具有从配置文件读取的变量,并指定了从哪些文件中读取配置。为了将特定变量指定为读取并保存到配置文件,还必须将Config说明符提供给UPROPERTY()宏。
UPROPERTY(Config)
float TestConfigFloat;
修饰变量的Config说明符不需要名字。现在可以从任意配置文件读取TestConfigFloat属性,配置文件中的格式如下:
[/Script/UE4_Test.TestConfigActor]
TestConfigFloat=0.1f
2、配置文件和继承
Config说明符、UCLASS说明符和UPROPERTY说明符是可以继承的。这意味着子类可以读取或保存父类中指定为 Config 的所有变量,并且这些变量将属于同一配置文件类别。所有这些变量都将位于带有子类名称的分段标题下。如从上面的 TestConfigActor 继承的 ChildConfigClass 的配置信息会保存在相同的配置文件中,且如下所示:
[/Script/UE4_Test.ChildConfigClass]
TestConfigFloat=0.1f
3、按每个实例配置
UE4能够将对象的配置保存到任何需要的配置文件中。如果在UCLASS宏中使用说明符 PerObjectConfig ,则该类的配置信息将按每个实例存储,其中每个实例在 “.ini”文件中都有一个以该对象命名的分段,命名格式为[ObjectName ClassName]。 该关键字会被子类继承。
4、配置类别
- Compat
- DeviceProfiles
- Editor
- EditorGameAgnostic
- EditorKeyBindings
- EditorUserSettings
- Engine
- Game
- Input
- Lightmass
- Scalability
5、文件层级
每个配置类别都有自己的文件层级,这些层级指定了特定于引擎、特定于项目和特定于平台的配置。
系统从Base.ini开始读取配置文件层级,层级中后继文件中的值将覆盖先前的值。引擎文件夹中的所有配置文件将应用于所有项目,而特定于项目的设置应配置在项目目录下的文件中。最后系统将所有特定于项目和特定于平台的差异保存到[ProjectDirectory]/Saved/Config/[Platform]/[Category].ini 中。
下面的文件层级示例 用来说明Engine类别的读取顺序:
- Engine/Config/Base.ini
- Engine/Config/BaseEngine.ini
- Engine/Config/[Platform]/[Platform]Engine.ini
- [ProjectDirectory]/Config/DefaultEngine.ini
- [ProjectDirectory]/Config/[Platform]/[Platform]Engine.ini
- [ProjectDirectory]/Saved/Config/[Platform]/Engine.ini
Base.ini通常为空。Saved目录中的配置文件只存储配置文件堆栈中特定于项目和特定于平台的差异。
6、使用配置文件
格式
典型的配置文件由 分段 和 键-值 组成,如下:
[Section]
Key=Value
特殊字符
- + 如果该属性不存在,则(从之前的配置文件或同一配置文件中的更早版本)添加一行。
- - 删除一行(但该行必须为精确匹配)。
- . 添加一个新属性。
- ! 删除一个属性,不必提供精确匹配,只需提供属性的名称即可。
“.” 类似于 “+” ,只是它可能会添加一个重复的行。它对于绑定(如DefaultInput.ini中所示)非常有用。使用 “+” 将无法添加最后一行,也不能正确绑定。由于配置文件的组合,可能会出现类似的使用模式。如下所示:
[/Script/Engine.PlayerInput]
Bindings=(Name="Q",Command="Foo")
.Bindings=(Name="Q",Command="Bar")
.Bindings=(Name="Q",Command="Foo")