在UE5中,使用GConfig
类操作配置文件的核心方法如下:
一、基础操作流程
创建配置文件路径
// 获取项目配置目录(自动创建) FString ConfigPath = FPaths::ProjectConfigDir() / "MyConfig.ini"; // 或直接指定路径 FString CustomPath = FPaths::ProjectDir() / "Config/MyConfig.ini";
写入配置数据
void UMyFunctionLibrary::WriteConfig( const FString& Section, const FString& Key, const FString& Value, const FString& ConfigPath ) { GConfig->SetString(*Section, *Key, *Value, *ConfigPath); GConfig->Flush(true, *ConfigPath); // 强制刷新到磁盘 }
读取配置数据
FString UMyFunctionLibrary::ReadConfig( const FString& Section, const FString& Key, const FString& ConfigPath ) { FString Result; GConfig->GetString(*Section, *Key, Result, *ConfigPath); return Result; }
二、高级配置方法
自动配置类(推荐)
UCLASS(config=MyConfig, defaultconfig) class UMyConfig : public UObject { GENERATED_BODY() UPROPERTY(Config, EditAnywhere) float TestValue = 1.0f; UPROPERTY(Config, EditAnywhere) FString TestString = "Default"; };
- 自动保存路径:
ProjectName/Config/DefaultMyConfig.ini
(默认配置) - 运行时路径:
ProjectName/Saved/Config/Windows/MyConfig.ini
【3】
- 自动保存路径:
全局配置标记
UPROPERTY(globalconfig) int32 GlobalSetting = 42;
- 优先级高于局部配置
- 保存在
DefaultEngine.ini
根目录【9】
三、蓝图集成方案
创建蓝图库类
UCLASS(BlueprintType) class UConfigManager : public UBlueprintFunctionLibrary { GENERATED_BODY() UFUNCTION(BlueprintCallable, Category="Config") static void SaveConfig(FString Section, FString Key, FString Value) { UConfigManager::WriteConfig(Section, Key, Value, FPaths::ProjectConfigDir() / "MyConfig.ini"); } // 对应读取函数... };
- 通过
#include "Config/ConfigManager.h"
暴露给蓝图【7】
- 通过
四、打包配置设置
Build.cs配置
public class YourProjectBuild : ModuleRules { public YourProjectBuild(ReadOnlyTargetRules Target) : base(Target) { RuntimeDependencies.Add(Path.Combine(ModuleDirectory, "../../Config", "MyConfig.ini")); } }
- 确保配置文件包含在发布包中【8】
五、注意事项
路径规范
刷新机制
GConfig->Flush(true)
:强制写入磁盘GConfig->Flush(false)
:仅更新内存缓存
类型支持
- 基础类型:
FString
/int32
/float
- 复杂类型需序列化处理
- 基础类型:
六、完整示例
// MyConfigManager.h
#pragma once
#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "MyConfigManager.generated.h"
UCLASS()
class MYPROJECT_API UMyConfigManager : public UObject
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable, Category = "Config")
static void WriteConfig(FString Section, FString Key, FString Value);
UFUNCTION(BlueprintCallable, Category = "Config")
static FString ReadConfig(FString Section, FString Key);
};
// MyConfigManager.cpp
#include "MyConfigManager.h"
#include "GameFramework/Game.h"
#include "Misc/FileHelper.h"
void UMyConfigManager::WriteConfig(FString Section, FString Key, FString Value) {
FString ConfigPath = FPaths::ProjectConfigDir() / "MyConfig.ini";
GConfig->SetString(*Section, *Key, *Value, *ConfigPath);
GConfig->Flush(true, *ConfigPath);
}
FString UMyConfigManager::ReadConfig(FString Section, FString Key) {
FString ConfigPath = FPaths::ProjectConfigDir() / "MyConfig.ini";
FString Result;
GConfig->GetString(*Section, *Key, Result, *ConfigPath);
return Result;
}
七、典型应用场景
游戏内设置
- 保存音量/画质等用户偏好
- 使用
globalconfig
标记实现跨项目同步【9】
编辑器扩展
- 通过
UDeveloperSettings
继承实现可视化配置面板【3】
- 通过
热更新配置
- 动态加载
Config/
目录下的配置文件
- 动态加载
建议优先使用UCLASS(config)
自动配置方案,复杂场景结合GConfig
API实现精细控制。配置文件默认使用UTF-8编码,需注意跨平台兼容性处理。