首页 > 其他分享 >UE4配置文件

UE4配置文件

时间:2023-05-31 16:22:14浏览次数:48  
标签:Engine 变量 配置文件 说明符 ini UE4 Config

# 配置文件

此文为configurationcategories (opens new window)的原创翻译,本文内容版权归原文所有,仅供学习,如需转载望注本文地址,翻译不易,谢谢理解。

包含配置gameplay或者引擎行为属性设置值的文本文件。

在工程加载时,配置文件可以被用来给一些需要初始化的类属性设置值,配置文件中有按模块排放键值对,一个或者更多的值可通过一个给定的键关联。

引擎配置文件用来存放对象或变量的默认值,用户输入配置可用作键绑定,默认地,DefaultEngine.ini和DefaultGame.ini是在你使用工程向导创建空白工程的时候创建的。创建于模板的新工程也会在需要的时候生成DefaultEditor.ini和DefaultGame.ini文件。

SaveConfig()函数可以被有Config类说明符的类调用,这会将被Config属性说明符标记的任何属性保存到配置文件。一般地,被SaveConfig()标记的变量值会被保存到一个区域,它的区域名称格式是[(package).(classname)]。比如,DefaultEngine.ini中[/Script/Engine.Engine]的区域会指向引擎包里的引擎类,当然还有一些硬编码的区域名除外。

之前只能通过编辑配置文件来进行的设置现在可以在编辑器中的项目设置面板进行配置。

# 指定可配置变量

为了指定哪些变量应该从配置文件中读值,首先应该在包含这些变量的类的UCLASS宏中使用Config说明符修饰。

UCLASS(Config=Game)
class AExampleClass : public AActor
1
2

注意,在Config说明符中必须要提供一个分类,比如上面的Game,这决定了类的变量应该从哪读然后保存到哪。所有可能的分类都在FConfigCache.ini文件中定义了,要得到完整的配置文件分类,请看下面。

使用Config说明符来修饰一个类只是表明该类有变量从配置文件中读值,然后指定从哪个配置文件中读,为了说明该类的哪个特定变量会从配置文件读写,需要在UPROPERTY()宏中使用Config说明符。

UCLASS(Config=Game)
class AExampleClass : public AActor
{
GENERATED_UCLASS_BODY()

UPROPERTY(Config)
float ExampleVariable;

};
1
2
3
4
5
6
7
8
9

在属性的Config说明符中不用指定分类,上面的ExampleVariable属性应该从配置文件层级中的任何Game配置文件读取,只要在配置文件中以下面的语法提供:

[/Script/ModuleName.ExampleClass]
ExampleVariable=0.0f
1
2

# 配置文件和继承

Config,UCLASS,UPROPERTY说明符是会被继承的。这意味着一个子类可以读或者保存所有在父类中被Config修饰的变量,他们也会在同一个配置目录中。变量将会在以子类名命名的区域中。举例来说,继承ExampleClass的ChildExampleClass的配置文件信息将会像下面这样,同样被保存在同样的Game配置文件中。

[/Script/ModuleName.ChildExampleClass]
ExampleVariable=0.0f
1
2

# 每个实例的配置

UE4有能力保存一个对象的配置信息到任何想要的配置文件。如果在UCLASS宏中使用PerObjectConfig说明符,这个类的配置信息将会按每个实例形式保存,每个实例在.ini文件中都会有一个区域,以[ObjectName ClassName]形式保存,这个关键字会被子类继承。

# 配置文件结构

每个配置分类都有它自己的层级文件,会指定引擎相关,项目相关和平台相关的配置信息。

# 配置目录

  • Compat
  • DeviceProfiles
  • Editor
  • EditorGameAgnostic
  • EditorKeyBindings
  • EditorUserSettings
  • Engine
  • Game
  • Input
  • Lightmass
  • Scalability

# 文件层级

配置文件的层级在读的时候以Base.ini开始,层级后面文件中的值会覆盖前面的。在引擎目录中的所有文件会被应用到所有项目里,尽管项目相关的设置应该被保存在项目目录中的文件,最后,所有项目相关和平台相关的不同会被保存到[ProjectDirectory]/Saved/Config/[Platform]/[Category].ini。

下面以引擎类别的配置文件的文件层级为例:

  1. Engine/Config/Base.ini(该文件通常为空)
  2. Engine/Config/BaseEngine.ini
  3. Engine/Config/[Platform]/[Platform]Engine.ini
  4. [ProjectDirectory]/Config/DefaultEngine.ini
  5. [ProjectDirectory]/Config/[Platform]/[Platform]Engine.ini
  6. [ProjectDirectory]/Saved/Config/[Platform]/Engine.ini

Saved目录中的配置文件只存储项目相关和平台相关的不同。

# 配置文件约定

# 格式

配置文件应该包含一个区域名字和相应的键值对。比如

[Section]
Key=Value
1
2

# 特殊字符

  • + : 如果这个属性在层级较低的文件或同样的文件中还不存在,添加一行。
  • - : 移除一行,它需要准确地匹配。
  • . : 添加一个新的属性。
  • ! : 移除一个属性,你不用准确匹配,只需指定属性名字。

注意"."就像"+"一样,但它可能会添加重复的一行,这在键绑定的时候会比较有用,可在DefaultInput.ini中看到,举例来说,一般最后的绑定会起作用,所以你需要添加如下内容:

[/Script/Engine.PlayerInput]
Bindings=(Name="Q",Command="Foo")
.Bindings=(Name="Q",Command="Bar")
.Bindings=(Name="Q",Command="Foo")
1
2
3
4

它会正常地工作,在这里使用+将不能添加最后一行,而且你的绑定也是不对的,由于配置文件的结合,上面的用法会经常出现。

# 注释

在配置文件中,大部分人的感觉是分号表示注释,但并不是这样的,FConfigFile::ProcessInputFileContents并不会将分号和任何其他字符视为注释分隔符,这是有意为之的,从技术上来说,任何字符都可以代表一个不同的键值对,典型地,一个分号被放在一个新行的开头,它就像注释一样工作,但它实际并不是。

# 蓝图与配置文件

蓝图中的变量也可以从配置文件中读取,但需要在变量的细节面板勾选Config Variable。

ConfigVariable

可以将鼠标移动到Config Variable处查看配置文件信息,以及要写入配置文件的区域名称。

TipInfo

# 注意点

  • 不管是蓝图还是C++在程序运行时需要以Standalone Game模式运行,否则不会从配置文件中读取变量值。
  • 蓝图中将变量设置为可配置变量,会在UE4启动时从相应的配置文件读取到蓝图里,但是并不会自动更新到场景中该蓝图实例化的对象里,一般在蓝图中修改这些变量值,其场景中的实例化对象会跟着改变。
  • 修改蓝图中的变量值,在关闭时并不会保存到配置文件中,下次打开工程该蓝图中的变量值依旧会从配置文件中读取。

# 扩展阅读

  1. CustomSettings (opens new window)
  2. UE4中Config的使用 (opens new window)

标签:Engine,变量,配置文件,说明符,ini,UE4,Config
From: https://www.cnblogs.com/tomato-haha/p/17446498.html

相关文章

  • UE4代码编写标准
    #代码编写标准此文为CodingStandard(opensnewwindow)的原创翻译,本文内容版权归原文所有,仅供学习,如需转载望注本文地址,翻译不易,谢谢理解。在Epic,我们有一些编码标准和约定。这个文档不打算讨论或进行改进,相反,它反映了Epic的当前编码标准。编码约定对程序员很重要,因为:软件......
  • UE4时间管理
    #时间管理定时器是在短暂延迟或一段时间后计划执行一些操作。比如,你可能想让玩家获取一些东西后变无敌,在十秒后变回原状态,又或者你想让玩家在一个充满毒气的屋子里移动时每秒掉多少血。这样的行为都是通过定时器来实现的。定时器是被全局TimerManager(FTimerManager类)中管理......
  • Nginx配置文件
    nginx配置文件详解```安装完了之后,后续nginx的所有功能,都是围绕着修改nginx配置文件生效了看懂配置文件,运维来说,达到手写nginx配置文件,才是合格的。```通过官网yum仓库默认安装的nginx.confusernginx;worker_processesauto;error_log/var/log/nginx/error.lognot......
  • redis 7.0 配置文件详解
    本文配置文件版本是Redis7.0。5.5.1常规通用配置这些是我的常规配置,每个Redis启动必备参数,你一定要掌握,涉及到网络、模块插件、运行模式、日志等。MODULES这个配置可以加载模块插件增强我的功能,常见的模块有RedisSearch、RedisBloom等。关于模块加载可以参考【5.6布隆......
  • 关于VRP配置文件的操作
    关于VRP配置文件的操作目录关于VRP配置文件的操作场景一场景二前言:关于华为网络设备操作系统VRP配置文件的操作是NA级别的内容,已经学过很久了,但到了真实环境使用时多多少少有一些不自然,原因无非是思考的深度不足且练习的次数也不足,虽然现在已经学到IE了,但发觉发现这些基础的操......
  • UE4 源码解析----引擎初始化流程
      在研究UE4的源码过程中着实不理解的地方有很多,今天给大家分享一下UE4引擎的初始化流程。一、引擎的函数入口C++的函数入口都是Main()函数入口,UE4也是一样,Engine\Source\Runtime\Launch\PrivateWindows函数入口 引擎入口函数为:GuardedMain 二、引擎初始化的三个阶......
  • UE4材质入门
    前言:在学习的过程中笔记是不可缺少的,匆匆看过一遍不记笔记和实操的话总会忘掉一些知识点或者是记的不牢固,所以我写了本系列文章,一方面是强迫自己认认真真的看完一章课程,另一方面记笔记加深一下自己的记忆以及思考。所以本系列文章是我学习过程中的笔记,思考,实操以及作业然后分享给......
  • springboot使用jdbc连接mysql(不用配置文件)
     1、连接mysql的工具类:packagecom.jzproject.common.mysql;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONArray;importorg.springframework.jdbc.core.JdbcTemplate;importjava.sql.*;importjava.util.ArrayList;importjava.util.HashMap;......
  • MongoDB学习笔记:配置文件
    本文更新于2023-05-11。使用MongoDB6.0.4。官方文档:https://www.mongodb.com/docs/manual/reference/configuration-options/Linux下配置文件为/etc/mongod.conf。#后面的内容作为注释忽略。大多数参数与mongod的命令行参数对应,如命令行参数为不需指定值的开关则设置为true或f......
  • 静态配置文件的问题
    静态配置文件的问题在业务量比较小的单体应用中,静态文本配置文件使用是没有大的问题。但是随着业务逐渐发展壮大,对大单体拆分为多个应用,就会产生一些问题:配置文件分散,修改起来比较麻烦配置生效不及时,修改后需要重启应用以使配置生效多环境配置,无法区分多个配置环境,比如开发的......