打包目录\项目名称\Saved\Config\WindowsNoEditor
C:\Users\用户名\AppData\Local\项目名称\Saved\Config\WindowsNoEditor
文件格式: 文件名.ini
文本格式,分段和键-值对
[配置标题Section]
key1 = value1
key2 = value2
-ConsoleKeys=Tilde
+ConsoleKeys=Tilde
Bindings=(Name="Q",Command="Foo")
.Bindings=(Name="Q",Command="Bar")
; 这是一条注释
Config=Game 默认路径为 [ProjectName]\Saved\Config\Windows\Game.ini
注意配置文件的 section 设置 [/Script/ModuleName.ExampleClass]
SaveConfig(CPF_Config, *ConfPath);
可以用于将变量值存到配置文件中
ReloadConfig(NULL, *ConfPath)
可以从配置文件中读取值,实时
LoadConfig() 可以从配置文件中读取值
UCLASS(Config=Game)
class TIPS_API AConfigActor : public AActor
{
// 省略
UPROPERTY(Config, BlueprintReadWrite)
float Examplefloat;
UPROPERTY(Config, BlueprintReadWrite)
TArray<FString> ExampleArray;
};
void AConfigActor::BeginPlay()
{
Super::BeginPlay();
if (GConfig)
{
GConfig->Flush(true, GGameIni); //刷新缓存
LoadConfig(AConfigActor::StaticClass(), *GGameIni);
//ReloadConfig(this->GetClass(), *ConfigPath);
//SaveConfig();
}
}
测试时,派生蓝图类,section 设为类路径也可以
蓝图中添加的变量也可以使用配置文件,需要勾选 Config Variable
[/Game/CPPFunction/DataDrive/BP_ConfigActor.BP_ConfigActor_C]
ExampleArray=1
ExampleArray=2
ExampleArray=20
ConfigVector=(X=10.000000,Y=20.000000,Z=30.000000)
创建 UDeveloperSettings 派生类
支持 ProjectSettings 修改
生成路径为 [ProjectName]\Config\DefaultGame.ini
UCLASS(Config = DataDrivenSettings, defaultconfig)
class TIPS_API UDataDrivenSettings : public UDeveloperSettings
{
GENERATED_BODY()
public:
/** Gets the settings container name for the settings, either Project or Editor */
virtual FName GetContainerName() const override { return TEXT("Project"); }
/** Gets the category for the settings, some high level grouping like, Editor, Engine, Game...etc. */
virtual FName GetCategoryName() const override { return TEXT("DataDrivenSettings"); }
/** The unique name for your section of settings, uses the class‘s FName. */
virtual FName GetSectionName() const override { return TEXT("DataDrivenSettings"); }
public:
UPROPERTY(Config, EditAnywhere, BlueprintReadWrite)
FString PlayerName="Default";
UPROPERTY(Config, EditAnywhere, BlueprintReadWrite)
float PlayerHealth = 100.0f;
};
GConfig 类型为 FConfigCacheIni* ,下面为 FConfigCacheIni 的一些方法,更详细的接口可以查看文章尾部的附录
void LoadFile( const FString& InFilename, const FConfigFile* Fallback = NULL, const TCHAR* PlatformString = NULL );
void SetFile( const FString& InFilename, const FConfigFile* NewConfigFile );
void UnloadFile( const FString& Filename );
void Detach( const FString& Filename );
bool GetString( const TCHAR* Section, const TCHAR* Key, FString& Value, const FString& Filename );
bool GetText( const TCHAR* Section, const TCHAR* Key, FText& Value, const FString& Filename );
bool GetSection( const TCHAR* Section, TArray<FString>& Result, const FString& Filename );
bool DoesSectionExist(const TCHAR* Section, const FString& Filename);
void SetString( const TCHAR* Section, const TCHAR* Key, const TCHAR* Value, const FString& Filename );
void SetText( const TCHAR* Section, const TCHAR* Key, const FText& Value, const FString& Filename );
bool RemoveKey( const TCHAR* Section, const TCHAR* Key, const FString& Filename );
bool EmptySection( const TCHAR* Section, const FString& Filename );
bool EmptySectionsMatchingString( const TCHAR* SectionString, const FString& Filename );
FString GetStr(const TCHAR * Section, const TCHAR * Key, const FString & Filename);
bool GetInt(const TCHAR * Section, const TCHAR * Key, int32 & Value, const FString & Filename);
bool GetFloat(const TCHAR * Section, const TCHAR * Key, float& Value, const FString & Filename);
bool GetDouble(const TCHAR * Section, const TCHAR * Key, double& Value, const FString & Filename);
bool GetBool(const TCHAR * Section, const TCHAR * Key, bool& Value, const FString & Filename);
int32 GetArray(const TCHAR * Section, const TCHAR * Key, TArray<FString>&out_Arr, const FString & Filename);
[/Script/EngineSettings.GameMapsSettings]
GameDefaultMap=/Game/CPPFunction/MultiThread/Map_multithread.Map_multithread
EditorStartupMap=/Game/CPPFunction/MultiThread/Map_multithread.Map_multithread
if (GConfig)
{
FString GameDefaultMap;
bool success = GConfig->GetString(TEXT("/Script/EngineSettings.GameMapsSettings"), TEXT("GameDefaultMap"), GameDefaultMap, GEngineIni);
if (success)
{
UE_LOG(LogTemp, Warning, TEXT(" GameDefaultMap: %s"), *GameDefaultMap);
return true;
}
}
return false;
// >> LogTemp: Warning: GameDefaultMap: /Game/CPPFunction/MultiThread/Map_multithread.Map_multithread
[DarkSoul]
Name=Frank
DeadTimes=100
if (GConfig)
{
FString Name;
int32 DeadTimes;
bool success = GConfig->GetString(TEXT("DarkSoul"), TEXT("Name"), Name, GGameIni);
success &= GConfig->GetInt(TEXT("DarkSoul"), TEXT("DeadTimes"), DeadTimes, GGameIni);
if (success)
{
UE_LOG(LogTemp, Warning, TEXT(" Name: %s, DeadTimes: %d"), *Name, DeadTimes);
return true;
}
}
return false;
[ProjectName]\Saved\Config\Windows\Game.ini
[ProjectName]\Config\DefaultGame.ini
FConfigFile CustomConfigFile;
FString Path = FPaths::ProjectConfigDir() / TEXT("SympleConfig.ini");
CustomConfigFile.Read(Path);
FString ProjectID;
bool success = CustomConfigFile.GetString(TEXT("ProjectSettings"), TEXT("ProjectID"), ProjectID);
if (success)
{
UE_LOG(LogTemp, Warning, TEXT(" ProjectID: %s"), *ProjectID);
return true;
}
return false;
Set
if (GConfig)
{
FString Name = "Mike";
TArray<FString> Buff;
Buff.Add(TEXT("Fire"));
Buff.Add(TEXT("Strong"));
Buff.Add(TEXT("Speed"));
GConfig->SetString(TEXT("DarkSoul"), TEXT("Name"), *Name, GGameIni);
GConfig->SetArray(TEXT("DarkSoul"), TEXT("Buff"), Buff, GGameIni);
GConfig->SetVector(TEXT("DarkSoul"), TEXT("Name"), GetActorLocation(), GGameIni);
}
FString GEngineIni; /* Engine ini filename */
/** Editor ini file locations - stored per engine version (shared across all projects). Migrated between versions on first run. */
FString GEditorIni; /* Editor ini filename */
FString GEditorKeyBindingsIni; /* Editor Key Bindings ini file */
FString GEditorLayoutIni; /* Editor UI Layout ini filename */
FString GEditorSettingsIni; /* Editor Settings ini filename */
/** Editor per-project ini files - stored per project. */
FString GEditorPerProjectIni; /* Editor User Settings ini filename */
FString GCompatIni;
FString GLightmassIni; /* Lightmass settings ini filename */
FString GScalabilityIni; /* Scalability settings ini filename */
FString GHardwareIni; /* Hardware ini filename */
FString GInputIni; /* Input ini filename */
FString GGameIni; /* Game ini filename */
FString GGameUserSettingsIni; /* User Game Settings ini filename */
FString GRuntimeOptionsIni; /* Runtime Options ini filename */
FString GInstallBundleIni; /* Install Bundle ini filename*/
FString GDeviceProfilesIni; /* Runtime DeviceProfiles ini filename - use LoadLocalIni for other platforms‘
// Derived functions.
FString GetStr
(
const TCHAR* Section,
const TCHAR* Key,
const FString& Filename
);
bool GetInt
(
const TCHAR* Section,
const TCHAR* Key,
int32& Value,
const FString& Filename
);
bool GetFloat
(
const TCHAR* Section,
const TCHAR* Key,
float& Value,
const FString& Filename
);
bool GetDouble
(
const TCHAR* Section,
const TCHAR* Key,
double& Value,
const FString& Filename
);
bool GetBool
(
const TCHAR* Section,
const TCHAR* Key,
bool& Value,
const FString& Filename
);
int32 GetArray
(
const TCHAR* Section,
const TCHAR* Key,
TArray<FString>& out_Arr,
const FString& Filename
);
/** Loads a "delimited" list of strings
* @param Section - Section of the ini file to load from
* @param Key - The key in the section of the ini file to load
* @param out_Arr - Array to load into
* @param Filename - Ini file to load from
*/
int32 GetSingleLineArray
(
const TCHAR* Section,
const TCHAR* Key,
TArray<FString>& out_Arr,
const FString& Filename
);
bool GetColor
(
const TCHAR* Section,
const TCHAR* Key,
FColor& Value,
const FString& Filename
);
bool GetVector2D(
const TCHAR* Section,
const TCHAR* Key,
FVector2D& Value,
const FString& Filename);
bool GetVector
(
const TCHAR* Section,
const TCHAR* Key,
FVector& Value,
const FString& Filename
);
bool GetVector4
(
const TCHAR* Section,
const TCHAR* Key,
FVector4& Value,
const FString& Filename
);
bool GetRotator
(
const TCHAR* Section,
const TCHAR* Key,
FRotator& Value,
const FString& Filename
);
void SetInt
(
const TCHAR* Section,
const TCHAR* Key,
int32 Value,
const FString& Filename
);
void SetFloat
(
const TCHAR* Section,
const TCHAR* Key,
float Value,
const FString& Filename
);
void SetDouble
(
const TCHAR* Section,
const TCHAR* Key,
double Value,
const FString& Filename
);
void SetBool
(
const TCHAR* Section,
const TCHAR* Key,
bool Value,
const FString& Filename
);
void SetArray
(
const TCHAR* Section,
const TCHAR* Key,
const TArray<FString>& Value,
const FString& Filename
);
/** Saves a "delimited" list of strings
* @param Section - Section of the ini file to save to
* @param Key - The key in the section of the ini file to save
* @param out_Arr - Array to save from
* @param Filename - Ini file to save to
*/
void SetSingleLineArray
(
const TCHAR* Section,
const TCHAR* Key,
const TArray<FString>& In_Arr,
const FString& Filename
);
void SetColor
(
const TCHAR* Section,
const TCHAR* Key,
FColor Value,
const FString& Filename
);
void SetVector2D(
const TCHAR* Section,
const TCHAR* Key,
FVector2D Value,
const FString& Filename);
void SetVector
(
const TCHAR* Section,
const TCHAR* Key,
FVector Value,
const FString& Filename
);
void SetVector4
(
const TCHAR* Section,
const TCHAR* Key,
const FVector4& Value,
const FString& Filename
);
void SetRotator
(
const TCHAR* Section,
const TCHAR* Key,
FRotator Value,
const FString& Filename
);
【UE4 C++】 Config Settings配置文件(.ini)
原文:https://www.cnblogs.com/shiroe/p/14771446.html