目录
一.总体概述
二.概念须知
2.1 概念
2.2 基本原理
2.2.1 配置文件结构
2.2.2 配置文件目录分析
三.使用流程
3.1 自动配置
3.2 手动编码配置
四.配置文件的存储流程
五.原理与特性分析
5.1 配置文件的意义
5.2 配置文件的存储原理
5.3 配置文件和继承
5.4 基于每个对象实例的配置
六.其他
一.配置总体概述
UE4中,配置文件(Config)其实就是.ini文件。可以用于设置加载时要初始化的属性的值,配置信息按照键值对的格式来实现。虚幻4官方文档只有简单的使用规则,要想深入了解还需要查看源代码才行,所以这里我把自己的学习成果分享给大家。一个完整的配置文件格式如下图1-1所示。
我们所见到的配置文件一般只存在于以下四个路径。
1. EngineConfig及其子目录
2. EngineSavedConfig及其子目录(引擎运行后生成)
3. Projects[ProjectName]Config及其子目录
4. Projects[ProjectName]SavedConfig及其子目录(游戏项目运行后生成)
如上面所标记的,路径2与路径4的配置信息都是后生成的。
二.概念须知
为了后面的描述清晰,这里需要先简单描述一些基本原理以及一些概念。
2.1 概念
Section:如上图1-1,每个配置文件里面有很多模块,每个模块的标题就是一个section。
Flush:在代码里面,类FConfigCacheIni有一个名为Flush()的方法。它的表面意思是冲洗,奔涌,在代码里面表示将内存信息(即缓存的配置信息)准确无误的书写到文件里面。
GConfig:全局空间的一个配置缓存变量。定义如下FConfigCacheIni* GConfig =NULL;在不同的情况下存储不同的信息,如图2-1,图2-2。关于GConfig的内容后面会有较为详细的讲解。
SaveConfig函数:这个函数用来将配置信息保存到GConfig并保存到文件里面。(后面会详细解释他的使用以及参数的意义)。
LoadConfig函数:这个函数用来读取配置文件的信息并将该信息赋值给当前类对应的属性。(后面会进一步解释)
UCLASS(config=FileName):表示这个类默认条件下将配置信息保存到哪个配置文件,config后面的文件名可以是任意字符串。
UCLASS(perObjectConfig):表示这个类的配置信息将会基于每个实例进行存储。
UCLASS(config=XXX,configdonotcheckdefaults):表示这个类对应的配置文件不会检查XXX层级上层的DefaultXXX配置文件是否有该信息(后面会解释层级),就直接存储到Saved目录下。
UPROPERTY(config):不指定Section的情况下,标记config的这个属性在保存到配置文件里面的时候会保存在当前类对应的Section部分。同理,加载的时候也会从当前类对应的Section下加载。
UPROPERTY(globalconfig):不指定Section的情况下,标记config的这个属性在保存到配置文件里面的时候会保存在基类对应的Section部分。同理,加载的时候也会从基类对应的Section下加载。
注:如果这里有些内容不太理解,可以等看完后面再回头来看这些概念
2.2 基本原理
2.2.1 配置文件结构
为了对配置文件有一个整体的了解,我们必须要弄清配置文件的结构。
1. 配置分类
- Compat(兼容性)
- DeviceProfiles(设备概述文件)
- Editor(编辑器)
- EditorGameAgnostic(编辑器游戏未知的配置信息)
- EditorKeyBindings(编辑器按键绑定)
- EditorUserSettings(编辑器用户设置)
- Engine(引擎)
- Game(游戏)
- Input(输入)
- Lightmass(灯光构建相关)
- Scalability(可扩展性)
- EditorLayout(编辑器布局)
- SourceControlSettings(源码控制设置,只存在于引擎和工程的Save目录)
- TemplateDefs(模板定义,只存在于引擎和工程的Save目录)
上面基本描述了所有配置文件的类型,不同类型的配置设置放在不同的文件里面。当
然上面这些只是UE4为我们提供的文件类型,我们也可以定义自己的配置文件,也可以把内容放到你想放的任意一个文件里面。
在文章的最后面的附录会大致描述当前项目不同目录下配置文件存储的信息内容。
2. 文件层次结构
配置文件读入时从Base.ini开始,文件结构中后面文件内的值覆盖之前的值。Engine文
件夹中的文件将应用于所有项目,而针对特定项目的文件应该位于项目目录中的文件内。最后,所有特定项目和特定平台的差异都被保存[ProjectDirectory]/Saved/Config/[Platform]/
[Category].ini文件中。下面是配置文件的Engine类的文件层次结构示例。