前言
最近在尝试对GameplayAbility进行插件化处理。这么做好处在于这样可以方便后续项目的迭代。UE4官方频道有一个“盗贼之海”团队的经验分享视频,他们说制作的GAS Asset复用率能都达到90%,这可是相当惊人的程度。而且在不断地项目迭代过程中,使用GAS制作的技能、Buff/Debuff会越来越充分。从而加快后续项目的开发速度。所以将GAS插件化是很有必要的。
但使用GAS需要给项目添加一些项目设置比如:AssetManager中的DataAsset、指定AssetManager类、添加GameplayTag。在发现网上的添加配置方法无效后,我又花了一些时间研究,终于找到方法,隧有了此文。
Ue4配置设置方法
Ue4的配置设置方法大致为二:通过GConfig设置与直接设置对应UObject变量。 具体的可以参考Ue4的Wiki与一篇Csdn的文章:
- https://www.ue4community.wiki/legacy/config-files-read-and-write-to-config-files-zuoaht01
- https://blog.csdn.net/u012999985/article/details/52801264
通过GConfig进行修改
通过全局对象GConfig,调用GetInt/Float/Rotator/String/Array等函数获取对应的数值;调用SetInt/Float/Rotator/String/Array等函数设置数值。最终需要调用Flush函数将结果写入对应的ini文件中,不然重启后数据会丢失。
GConfig通过一个Map来存储配置,这个你可以通过断点来查看内部数据。这里我简单补充一下config系列函数中的一些形参的意思:
- Section:属性所处于的区块。
- Key:属性的变量名。
- Value:对应类型的属性值。
- Filename:存储ini文件的位置。Ue4提供了默认位置的字符串变量,具体的请下文。
据我所知Section可以通过将对应属性通过编辑器修改,找到对应的ini文件,即可从所在段落的第一行找到所在的Section。如果是自己写的类,Section即为类的资源路径。可通过在ContentBrowser中对指定类执行复制命令,之后在外部文本编辑器中粘贴即可得到。Key值就需要用VS或者VSCode之类的编辑器查询了。
请注意,在默认情况下使用以下代码,相关的配置的是保存在Saved——对应平台文件夹中的。
下面是Wiki上Rama大神的代码:
//in your player controller class
void AVictoryController::VictoryConfigGetTests()
{
//Basic Syntax
/*
bool GetString(
const TCHAR* Section,
const TCHAR* Key,
FString& Value,
const FString& Filename
);
*/
if(!GConfig) return;
//~~
//Retrieve Default Game Type
FString ValueReceived;
GConfig->GetString(
TEXT("/Script/Eng