You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
180 lines
6.4 KiB
Plaintext
180 lines
6.4 KiB
Plaintext
INTSourceChangelist:3692802
|
||
Availability: Public
|
||
Title: 配置文件
|
||
Crumbs: %ROOT%, Engine, Programming, Programming/Basics
|
||
Description:包含用于配置游戏进程或引擎行为的属性设置的文本文件。
|
||
Version: 4.9
|
||
|
||
|
||
[TOC (start:2 end:3)]
|
||
|
||
配置文件可用于为加载项目时将初始化的属性设置值。配置由按分段排列的键-值对决定。
|
||
单个给定键可以与一个或多个值相关联。
|
||
|
||
引擎配置文件用于对象和变量的默认值。用户输入配置可用于键绑定。默认情况下,当您使用 **项目向导(Project Wizard)** 创建新的空白项目时,
|
||
将创建DefaultEngine.ini和DefaultGame.ini。如果需要,以模板开始的新项目还可以生成DefaultEditor.ini和DefaultInput.ini配置
|
||
文件。
|
||
|
||
您可以在带[配置](Programming\UnrealArchitecture\Reference\Classes\Specifiers)类说明符的类上调用SaveConfig()函数。它会将标记 **配置(Config)** 属性说明符的
|
||
所有属性保存到适当的配置文件中。通常,由 **SaveConfig()** 保存的变量
|
||
位于分段标题中,其格式为[(package).(classname)]。例如,DefaultEngine.ini中的[/Script/Engine.Engine]分段指向存储在引擎包中的引擎类。
|
||
硬编码的分段名称有一些例外。
|
||
|
||
以前只能通过编辑配置文件才能使用的许多设置现在已可以在虚幻编辑器中的[](Engine\UI\ProjectSettings)编辑器中使用。
|
||
|
||
(#specifyingconfigurablevariables)
|
||
|
||
## 指定可配置变量
|
||
|
||
为了指定应从配置文件中读入的变量,包含这些变量的类必须首先在其UCLASS宏中提供配置说明符。
|
||
|
||
UCLASS(Config=Game)
|
||
class AExampleClass : public AActor
|
||
|
||
[REGION:note]
|
||
必须为配置说明符提供一个类别(即游戏)。这决定了从哪些配置文件中读取和保存该类的变量。FConfigCache.ini中定义了所有
|
||
可能的类别。有关所有配置文件类别的列表,请参阅[配置类别](#configurationcategories)。
|
||
[/REGION]
|
||
|
||
用配置说明符装饰类只表明该类可以具有从配置文件读入的变量,并指定了从哪些文件中读取配置。为了
|
||
将特定变量指定为读入并保存到配置文件,还必须将配置说明符提供给UPROPERTY()宏。
|
||
|
||
UCLASS(Config=Game)
|
||
class AExampleClass : public AActor
|
||
{
|
||
GENERATED_UCLASS_BODY()
|
||
|
||
UPROPERTY(Config)
|
||
float ExampleVariable;
|
||
|
||
};
|
||
|
||
没有类别将提供给属性的配置说明符。现在,您可以从任何游戏配置文件中的[配置文件层级](#filehierarchy)中读取ExampleVariable属性,
|
||
前提是使用以下语法指定该信息:
|
||
|
||
[/Script/ModuleName.ExampleClass]
|
||
ExampleVariable=0.0f
|
||
|
||
(#configfilesandinheritance)
|
||
|
||
### 配置文件和继承
|
||
|
||
配置说明符、UCLASS说明符和UPROPERTY说明符可继承。这意味着,子类可以读入或保存父类中指定为配置的所有变量,
|
||
并且所有这些变量将属同一配置文件类别。所有这些变量都将位于带有子类名称的分段标题下。例如,从上面的ExampleClass继承
|
||
的ChildExampleClass的配置文件信息会如下所示,且会保存在相同的游戏配置文件中。
|
||
|
||
[/Script/ModuleName.ChildExampleClass]
|
||
ExampleVariable=0.0f
|
||
|
||
|
||
(#per-instanceconfigurations)
|
||
|
||
### 按每个实例配置
|
||
|
||
虚幻引擎4能够将对象的配置保存到任何需要的配置文件中。如果在UCLASS宏中使用 **PerObjectConfig** 说明符,
|
||
则该类的配置信息将按每个实例存储,其中每个实例在.ini文件中都有一个以该对象命名的分段,命名格式为[ObjectName ClassName]。
|
||
该关键字将传播到子类。
|
||
|
||
|
||
(#configurationfilestructure)
|
||
|
||
## 配置文件结构
|
||
|
||
每个配置类别都有自己的文件层级,这些文件指定了特定于引擎、特定于项目和特定平台的配置。
|
||
|
||
(#configurationcategories)
|
||
|
||
### 配置类别
|
||
|
||
* 兼容
|
||
* 设备概述文件
|
||
* 编辑器
|
||
* 编辑器游戏未知
|
||
* 编辑器键绑定
|
||
* 编辑器用户设置
|
||
* 引擎
|
||
* 游戏
|
||
* 输入
|
||
* 全局光照
|
||
* 可延展性
|
||
|
||
(#filehierarchy)
|
||
|
||
### 文件层级
|
||
|
||
系统从Base.ini开始读入配置文件层级,层级中后继文件中的值将覆盖先前的值。引擎文件夹中的所有文件将应用于
|
||
所有项目,而特定于项目的设置应位于项目目录中的文件中。最后,系统将所有特定于项目和特定于平台的差异保存到[ProjectDirectory]/Saved/Config/[Platform]/[Category].ini
|
||
|
||
下面的文件层级示例用于配置文件的引擎类别。
|
||
|
||
1. Engine/Config/Base.ini
|
||
[REGION:note]
|
||
Base.ini通常为空。
|
||
[/REGION]
|
||
1. Engine/Config/BaseEngine.ini
|
||
1. Engine/Config/[Platform]/[Platform]Engine.ini
|
||
1. [ProjectDirectory]/Config/DefaultEngine.ini
|
||
1. [ProjectDirectory]/Config/[Platform]/[Platform]Engine.ini
|
||
1. [ProjectDirectory]/Saved/Config/[Platform]/Engine.ini
|
||
[REGION:note]
|
||
保存目录中的配置文件只存储配置文件堆栈中特定于项目和特定于平台的差异。
|
||
[/REGION]
|
||
|
||
|
||
|
||
(#workingwithconfigurationfiles)
|
||
|
||
## 使用配置文件
|
||
|
||
|
||
(#fileformat)
|
||
|
||
### 文件格式
|
||
|
||
|
||
(#sectionsandkey-valuepairs)
|
||
|
||
#### 分段和键-值对
|
||
|
||
典型的配置文件由键-值对分段组成,排列方式如下:
|
||
|
||
[Section]
|
||
Key=Value
|
||
|
||
(#specialcharacters)
|
||
|
||
#### 特殊字符
|
||
|
||
* *+* - 如果该属性不存在,则(从先前的配置文件或同一配置文件中的更早版本)添加一行。
|
||
* *-* - 删除一行(但该行必须为精确匹配)。
|
||
* *.*添加一个新属性。
|
||
* *!*- 删除一个属性;但您不必提供精确匹配,而只需提供属性的名称。
|
||
|
||
[REGION:note]
|
||
. 类似于+,只是它可能会添加一个重复的行。它对于绑定(如DefaultInput.ini中所示)非常有用,例如当最底部的绑定生效时,因此如果您添加类似下面的内容:
|
||
|
||
[/Script/Engine.PlayerInput]
|
||
Bindings=(Name="Q",Command="Foo")
|
||
.Bindings=(Name="Q",Command="Bar")
|
||
.Bindings=(Name="Q",Command="Foo")
|
||
|
||
它会适当地工作。使用 *+* 将无法添加最后一行,绑定也将不正确。由于配置文件的组合,可能会出现上述使用模式。
|
||
[/REGION]
|
||
|
||
(#comments)
|
||
|
||
#### 注释
|
||
|
||
大多数人似乎都会先入为主地认为分号在配置文件中表示注释,但它们并非如此(FConfigFile::ProcessInputFileContents实际上并不会将它们或任何其他字符串视为注释分隔符)。这一行为属于特意设计。从技术上讲,任何字符都可以代表不同的键-值对。通常,分号放在新的一行的开头。它的作用类似于注释,但实则不然。
|
||
|
||
; 这是一条注释
|
||
; 这也是!
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|