配置文件可用于为加载项目时将初始化的属性设置值。配置由按分段排列的键-值对决定。 单个给定键可以与一个或多个值相关联。
虚幻引擎(UE) 配置文件用于对象和变量的默认值。用户输入配置可用于键绑定。默认情况下,当您使用 项目向导(Project Wizard) 创建新的空白项目时,
将创建 DefaultEngine.ini
和 DefaultGame.ini
。如果需要,以模板开始的新项目还可以生成 DefaultEditor.ini
和 DefaultInput.ini
配置
文件。
您可以在带配置类说明符的类上调用 SaveConfig()
函数。它会将标记 配置(Config) 属性说明符的所有属性保存到适当的配置文件中。通常,由 SaveConfig() 保存的变量
位于分段标题中,其格式为[(package).(classname)]。例如,DefaultEngine.ini中的[/Script/Engine.Engine]分段指向存储在引擎包中的引擎类。
硬编码的分段名称有一些例外。
以前只能通过编辑配置文件才能使用的许多设置现在已可以在 虚幻编辑器 中的 项目设置 编辑器中使用。
指定可配置变量
为了指定应从配置文件中读入的变量,包含这些变量的类必须首先在其 UCLASS
宏中提供 Config
说明符。
UCLASS(Config=Game)
class AExampleClass : public AActor
必须为配置说明符提供一个类别(即游戏)。这决定了从哪些配置文件中读取和保存该类的变量。FConfigCache.ini中定义了所有 可能的类别。有关所有配置文件类别的列表,请参阅配置类别。
用配置说明符装饰类只表明该类可以具有从配置文件读入的变量,并指定了从哪些文件中读取配置。为了
将特定变量指定为读入并保存到配置文件,还必须将 Config
说明符提供给 UPROPERTY()
宏。
UCLASS(Config=Game)
class AExampleClass : public AActor
{
GENERATED_UCLASS_BODY()
UPROPERTY(Config)
float ExampleVariable;
};
没有类别将提供给属性的 Config
说明符。现在,您可以从任何游戏配置文件中的配置文件层级中读取 ExampleVariable
属性,
前提是使用以下语法指定该信息:
[/Script/ModuleName.ExampleClass]
ExampleVariable=0.0f
配置文件和继承
Config
、UCLASS
说明符和 UPROPERTY
说明符可继承。这意味着,子类可以读入或保存父类中指定为 Config
的所有变量,
并且所有这些变量将属同一配置文件类别。所有这些变量都将位于带有子类名称的分段标题下。例如,从上面的 ExampleClass
继承
的 ChildExampleClass
的配置文件信息会如下所示,且会保存在相同的游戏配置文件中。
[/Script/ModuleName.ChildExampleClass]
ExampleVariable=0.0f
按每个实例配置
虚幻引擎能够将对象的配置保存到任何需要的配置文件中。如果在 UCLASS
宏中使用 PerObjectConfig
说明符,
则该类的配置信息将按每个实例存储,其中每个实例在 .ini
文件中都有一个以该对象命名的分段,命名格式为 [ObjectName ClassName]
。
该关键字将传播到子类。
配置文件结构
每个配置类别都有自己的文件层级,这些文件指定了特定于引擎、特定于项目和特定平台的配置。
配置类别
- 兼容
- 设备概述文件
- 编辑器
- 编辑器游戏未知
- 编辑器键绑定
- 编辑器用户设置
- 引擎
- 游戏
- 输入
- 全局光照
- 可延展性
文件层级
系统从Base.ini开始读入配置文件层级,层级中后继文件中的值将覆盖先前的值。引擎文件夹中的所有文件将应用于
所有项目,而特定于项目的设置应位于项目目录中的文件中。最后,系统将所有特定于项目和特定于平台的差异保存到 [Project Directory]/Saved/Config/[Platform]/[Category].ini
。
下面的文件层级示例用于配置文件的引擎类别。
Engine/Config/Base.ini
Base.ini
通常为空。
Engine/Config/BaseEngine.ini
Engine/Config/[Platform]/base[Platform]Engine.ini
[Project Directory]/Config/DefaultEngine.ini
Engine/Config/[Platform]/[Platform]Engine.ini
[Project Directory]/Config/[Platform]/[Platform]Engine.ini
保存目录中的配置文件只存储配置文件堆栈中特定于项目和特定于平台的差异。
使用配置文件
文件格式
分段和键-值对
典型的配置文件由键-值对分段组成,排列方式如下:
[Section]
Key=Value
特殊字符
- + - 如果该属性不存在,则(从先前的配置文件或同一配置文件中的更早版本)添加一行。
- - - 从现有属性中移除条目(但必须是已有配对)。
- . - 在属性中添加新条目,无论该条目是否已经存在。
- ! - 清空属性的所有条目。命令行必须仍然保留 = ,但是之后的内容会被忽视。
. 类似于 +,只是它可能会添加一个重复的行。它对于绑定(如 DefaultInput.ini
中所示)非常有用,例如当最底部的绑定生效时,因此如果您添加类似下面的内容:
[/Script/Engine.PlayerInput]
Bindings=(Name="Q",Command="Foo")
.Bindings=(Name="Q",Command="Bar")
.Bindings=(Name="Q",Command="Foo")
它会适当地工作。使用 + 将无法添加最后一行,绑定也将不正确。由于配置文件的组合,可能会出现上述使用模式。
数组语法
.ini
文件中的语法如下所示:
[Section]
!ArrayVar=anything_since_this_just_clears_it
+ArrayVar=first_value
+ArrayVar=second_value
+ArrayVar=third_value
注释
大多数人似乎都会先入为主地认为分号在配置文件中表示注释,但它们并非如此(FConfigFile::ProcessInputFileContents
实际上并不会将它们或任何其他字符串视为注释分隔符)。这一行为属于特意设计。从技术上讲,任何字符都可以代表不同的键-值对。通常,分号放在新的一行的开头。它的作用类似于注释,但实则不然。
; 这是一条注释
; 这也是!