工作中需要用到UE3,看官方文档中文版翻译有些偷懒和翻译不妥当,故看着英文自己翻译理解了一下,以供后续参考。
目录
基础内容
0.概述
1.uc脚本中的类定义关联配置文件和保存
2.保存配置文件API
SaveConfig()
StaticSaveConfig()
3.ucc 编译的时候使用
4.配置文件类型
Default 配置文件 和 XXX 配置文件
Base 配置文件 和 Default配置文件
5.配置文件中的特殊符号
进阶内容
UE3的很多参数的配置都是在配置文件中。配置文件都存在于一个叫Config文件夹下面。配置文件的类型是ini文件,其中的组织结构是一个一个的section([section name]),每个section里面是一个一个的键值对(key=value),同一个键可以有多个值。
配置文件设置的内容一些用来初始化类中的变量,一些用来指示engine的一些工作——比如要unrealscript code compiler(ucc)要编译哪些脚本。
具体使用的地方可以在native code(C++)中使用,也可以在UnrealSript(.uc)中使用。
下面结合例子进行具体介绍。
随便找一个UDK自带的比如 GameInfo.uc文件
class GameInfo extends Info
config(Game)
上述指示了 GameInfo类 依赖于 XXXGame.ini 配置文件中的某个section中的键值对来进行初始化一些变量。
那么某个section的section名应该是什么呢? 是:[Engine.GameInfo],规则是 [(package).(classname)]
那包名为什么是Engine呢?因为这个GameInfo.uc在Engine那个文件夹下(Src下一级的文件夹,uc所在的Classes的上一级)
(ps: 编译的时候把Src下的AAA下的Classes文件夹下的 .uc 文件 打包成 一个 AAA.u。AAA就是文件夹名。AAA.u放在Script文件夹下)
那 XXXGame.ini 中的 XXX具体是什么呢 就是项目文件夹
比如项目文件夹叫 UDKGame,XXX 就是UDK
比如项目文件夹叫 UTGame, XXX 就是UT
(猜测项目名称都要叫 XXXGame)
所以 通过 UnrealScript(.uc)使用的,配置文件中的section名命名规则一般遵循的是 [(package).(classname)]
(ps, 也有例外,比如 [WinDrv.WindowsClient] section 并不是遵循上面规则, 具体先不深究了)
(ps 通过native code中使用的话,一般section名字就是 一个简单的标题。DefaultEngnine.ini 中的 [URL])
配置文件在读取初始化值,在运行时保存修改配置文件,作为下一次的初始化。
运行时保存object的配置到配置文件中有两个api,下面分别介绍
其中TestConfig.uc定义如下:
class TestConfig extends Actor
config(UDN);
var config int X;
function postbeginplay()
{
X=5;
SaveConfig();
}
注意X变量的修饰符 为 config。
当object实例调用 postbeginplay函数的时候,就会在 XXXUDN.ini中保存X,假设TestConfig.uc所在的包名是UDKGame:
[UDKGame.TestConfig] X=5
下次初始化这个object实例的时候,就用配置文件中的值对X进行初始化。
(有点类似于unity中的prefab在inspector界面中设置了初始值?)
另外,子类可以继承父类的config变量,也可以重写为其他iniName。下面例子没有重写。
TestConfigChild.uc
class TestConfigChild extends TestConfig;
function postbeginplay()
{
X=15;
SaveConfig();
}
同样保存在XXXUDN.ini中的section名为:
[UDKGame.TestConfigChild] X=15
StaticSaveConfig() 不通过实例调用,直接用类名调用。
class'TestConfigChild'.default.X = 30;
class'TestConfigChild'.static.StaticSaveConfig();
同样保存在XXXUDN.ini中的section名为:
[UDKGame.TestConfigChild] X=30
前面说到配置文件中也有给ucc脚本编译器编辑用的。
一般在 XXXEngine.ini 的 [BBB.EditorEngine] section 中设置了会存在哪些包,需要去这个去加载这些个包。
所以在新加了一个需要编译的包含uc文件的文件夹的时候要在对应的 XXXEngine.ini 的这个section里加上类似键值对。
可以分成
Base 配置文件(Engine文件夹下)
Default 配置文件 和 XXX 配置文件(项目名文件夹下,UDKGame)
当第一次运行游戏引擎的时候,一些 XXX 配置文件会缺失。这个时候,就会从 默认的配置文件中(Default打头的) 里面去转化为 XXX 打头的
(比如在 UDKGame 工程中,会把 DefaultEditor.ini 转化为 UDKEditor.ini ),一旦创建以后就是用的 UDKEditor.ini(Editor类型的)
默认的default 配置文件用于创建和恢复默认
有些 Default 配置文件是在是从 Engine 文件夹下面的 Base 配置文件中“继承”来的,可以看到default配置文件中都有 Configuration section 节的配置,里面的BasedOn字段就是指示了基于哪个配置文件。
也就是说你要基于某个配置文件基于某个配置文件的时候需要在配置文件的最开头有 [Configuration]节,然后配置 BasedOn key-value对。
剔除Default Base 和 XXX 以后的配置文件类型(用于在uc文件中类定义的 config(配置文件类型)):
比如:
Engine 用于 object 和 变量的初始化值
Input 用于key bindings 绑定 Exec Commands等功能的键绑定
等自带的类型,也可以有自定义的比如前面例子中的 UDN。
在多个配置文件中组合中(上面所说的 Base 和 Default 的关系)会用到上述的符号,比如这个config 是基于那个config来的。
+ 增加一条属性 之前没有属性
- 删除一条属性(必须完全匹配)
. 增加一条属性 可以是之前有的属性
! 删除一条属性(只需要属性名相同就可以)
https://forums.epicgames.com/udk/udk-development/udk-programming-and-unrealscript/228895-are-there-any-technical-differences-between-editpackages-and-modeditpackages
会先编译 EditPackages 的从上往下,然后再编译 ModEditPackages 的从上往下。
深入了解配置文件工作机制,博客中使用的ue4进行介绍,不妨碍理解原理。
只看了前面一部分,后续有空再细看,留着备忘。
https://blog.csdn.net/u012999985/article/details/52801264