UE4 自定义命令行变量
这里说的UE4中配置文件(Config)指的是.ini文件。 我们所见到的配置文件一般只存在于以下四个路径。
- \Engine\Config
- \Engine\Saved\Config
- Projects[ProjectName]\Config 在编辑器内对项目的配置
- Projects[ProjectName]\Saved\Config 游戏项目运行后生成 记录运行时修改的配置
一些规则
UCLASS(defaultconfig) | defaultconfig:配置会写入到引擎默认配置里, 路径一般是./Config 另外打包出来后运行以后会自动生成配置文件信息,但是无法再手动修改ini文件; |
UCLASS(configdonotcheckdefaults) | configdonotcheckdefaults可以运行时修改但是会保存到./Save/Config/Windows内对应名称的ini内 |
UCLASS(config=FileName) | 表示这个类默认条件下将配置信息保存到哪个配置文件,config后面的文件名可以是任意字符串。 |
UCLASS(perObjectConfig) | 表示这个类的配置信息将会基于每个实例进行存储。 |
UCLASS(config=XXX,configdonotcheckdefaults) | 表示这个类对应的配置文件不会检查XXX层级上层的DefaultXXX配置文件是否有该信息(后面会解释层级),就直接存储到Saved目录下。 |
UPROPERTY(config) | 不指定Section的情况下,标记config的这个属性在保存到配置文件里面的时候会保存在当前类对应的Section部分。同理,加载的时候也会从当前类对应的Section下加载。 |
UPROPERTY(transient) | 隐藏当前属性 即不保存到配置文件中 |
UPROPERTY(globalconfig) | 不指定Section的情况下,标记config的这个属性在保存到配置文件里面的时候会保存在基类对应的Section部分。同理,加载的时候也会从基类对应的Section下加载。 |
ini结构
[/Script/Engine.Console] //标题即Section
HistoryBuffer=TestLoadPak //key = value
[/Script/Engine.Console_2] //Section_2
HistoryBuffer2=TestLoadPak2 //key = value
————————————————
继承UDeveloperSettings
继承UDeveloperSettings的类,虚幻会自动的完成保存读取的工作,并且会在setting菜单中显示, ————————————————
//注释可以显示在编辑器Setting标题之下
UCLASS(Config = CustomSetting ,defaultconfig/*configdonotcheckdefaults*/)
class PLUGINSLEARN_API UCustomDeveloperSettings : public UDeveloperSettings
{
GENERATED_BODY()
public:
//决定是出现在Editor Preferences里还是Project Setting里 可选项[Editor] [Project]
virtual FName GetContainerName() const override {return TEXT("Project");}
//setting菜单里item名称
virtual FName GetCategoryName() const override {return TEXT("CustomSettings");}
// 唯一名称 一般用类名
virtual FName GetSectionName() const override {return TEXT("CustomSettings");}
// 获取CDO 借此获取配置数据
UFUNCTION(BlueprintPure,DisplayName = "CustomSetting")
static UCustomDeveloperSettings* Get(){return GetMutableDefault<UCustomDeveloperSettings>();}
//UPROPERTY需要Config标记
UPROPERTY(Config,EditAnywhere,BlueprintReadWrite,Category = "Category_0")
float FloatSetting = 10;
UPROPERTY(Config,EditAnywhere,BlueprintReadWrite,Category = "Category_0")
FString StringSetting = "Hello";
};
编译完成之后可以看到如下效果
如果在setting界面修改数值,则根据UCLASS是defaultconfig还是configdonotcheckdefaults在 Projects[ProjectName]\Config 或 Projects[ProjectName]\Saved\Config下找到DefaultCustomSetting.ini被修改后的结果
接下来就可以直接在蓝图中取到对应的config数据
对一个UObject进行配置
让一个UObject对象绑定Config需要使用到UObject::LoadConfig和UObject::SaveConfig函数
UCLASS(BlueprintType,Config = ObjectConifg)
class PLUGINSLEARN_API UObjectSetting : public UObject
{
GENERATED_BODY()
public:
UPROPERTY(Config,EditAnywhere,BlueprintReadWrite,Category = OneCategory)
int Voice = 10;
UPROPERTY(Transient,EditAnywhere,BlueprintReadWrite,Category = OneCategory)
int Speed = 10;
public:
UFUNCTION(BlueprintCallable)
void LoadSetting()
{
LoadConfig();
}
UFUNCTION(BlueprintCallable)
void SaveSetting()
{
SaveConfig();
}
};
在蓝图中调用