简介

常见存储路径

  • \Engine\Config\
  • \Engine\Saved\Config\ (运行后生成)
  • [ProjectName]\Config\
  • [ProjectName]\Saved\Config (运行后生成)
  • 打包文件
    • Development/Debug 打包目录\项目名称\Saved\Config\WindowsNoEditor
    • Shipping C:\Users\用户名\AppData\Local\项目名称\Saved\Config\WindowsNoEditor

常见配置文件

  • DefaultEditor.ini
  • DefaultEngine.ini
  • DefaultGame.ini
  • DefaultInput.ini

格式

  • 文件格式: 文件名.ini

  • 文本格式,分段和键-值对

    [配置标题Section]
    key1 = value1
    key2 = value2
    -ConsoleKeys=Tilde
    +ConsoleKeys=Tilde
    Bindings=(Name="Q",Command="Foo")
    .Bindings=(Name="Q",Command="Bar")
    ; 这是一条注释

指定可配置变量 UCLASS()、UPROPERTY()

简单使用

  • 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;
  • GGameIni 默认路径:[ProjectName]\Saved\Config\Windows\Game.ini

    GGameIni 也可以读取 [ProjectName]\Config\DefaultGame.ini

读取自定义 SympleConfig.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'

FConfigCacheIni 获取配置文件中数据的方法

// 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)的更多相关文章

  1. 利用GetPrivateProfileString读取配置文件(.ini)

    利用GetPrivateProfileString读取配置文件(.ini) 配置文件中经常用到ini文件,在VC中其函数分别为: 写入.ini文件:bool WritePrivateProfileSt ...

  2. Python常用配置文件ini、json、yaml读写总结

    开发项目时,为了维护一些经常需要变更的数据,比如数据库的连接信息.请求的url.测试数据等,需要将这些数据写入配置文件,将数据和代码分离,只需要修改配置文件的参数,就可以快速完成环境的切换或者测试数据 ...

  3. python 读取配置文件ini ---ConfigParser

    Python读取ini文件需要用到 ConfigParser 模块 关于ConfigParser模块的介绍详情请参照官网解释:https://docs.python.org/2.7/library/c ...

  4. maven settings 配置文件

    maven settings 配置文件 <?xml version="1.0" encoding="UTF-8"?> <settings xm ...

  5. LabVIEW--为设备添加配置文件.ini

    需求:我同一个程序下载到两台机器人上,有些参数是不一样的,比如说服务器的ID或者端口,以及存放文件的位置,如果我每次下载之前改程序的话就非常麻烦了(虽然在程序里面是作为全局变量来存的),不利于后期的更 ...

  6. .net Core Abp See config settings - "CustomSchemaIds" for a workaround

    Swagger  See config settings - "CustomSchemaIds" for a workaround System.InvalidOperationE ...

  7. ResourceBundle类的方式来读取config.properties配置文件参数值

    //获取config.properties配置文件参数值 public static ResourceBundle resource = ResourceBundle.getBundle(" ...

  8. Webpack探索【2】--- 安装、项目初始化、webpack.config.js配置文件

    本文主要讲安装.项目初始化.webpack.config.js配置文件方面的内容.

  9. Vue Cli 3:vue.config.js配置文件

    Vue Cli 3生成的项目结构,没有build.config目录,而是使用vue.config.js来进行配置. vue.config.js 是一个可选的配置文件,如果项目的 (和 package. ...

随机推荐

  1. 20210821 打表,蛇,购物,ants

    考场 T1 没看懂 T4 一眼回滚莫队,但忘记怎么写了,小慌 模拟 T1 题意的时候教练让 zsy 澄清了一下,确定了我不会做... T2 一看就是毒瘤题,T3 感觉比较可做 T4 确定了回滚的细节, ...

  2. Selenium系列(22) - 通过selenium控制浏览器滚动条的几种方式

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  3. WEB安全性测试之文件上传漏洞

    1.漏洞描述:文件上传漏洞,是指可以利用WEB上传一些特定的文件包含特定代码如(<?php phpnfo;?> 可以用于读取服务器配置信息.上传成功后可以点击) 上传漏洞是指用户上传了一个 ...

  4. 交换机之vlan详解

    一.为什么需要VLAN 1.1.什么是VLAN? VLAN(Virtual LAN),翻译成中文是"虚拟局域网".LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算 ...

  5. Ubuntu / CoreOS修改DNS配置

    不要直接手动修改文件 /etc/resolv.conf 安装好Ubuntu之后设置了静态IP地址,再重启后就无法解析域名.想重新设置一下DNS,打开/etc/resolv.conf cat /etc/ ...

  6. [源码解析] 深度学习流水线并行 PipeDream(5)--- 通信模块

    [源码解析] 深度学习流水线并行 PipeDream(5)--- 通信模块 目录 [源码解析] 深度学习流水线并行 PipeDream(5)--- 通信模块 0x00 摘要 0x01 前言 0x02 ...

  7. .net中使用JSON

    在.NET使用JSON作为数据交换格式 ASP.NET中JSON的序列化和反序列化 三种方式: 使用System.Web.Script.Serialization.JavaScriptSerializ ...

  8. Tars | 第7篇 TarsJava Subset最终代码的测试方案设计

    目录 前言 1. SubsetConf配置项的结构 1.1 SubsetConf 1.2 RatioConfig 1.3 KeyConfig 1.4 KeyRoute 1.5 SubsetConf的结 ...

  9. jdbc核心技术-宋红康

    视频地址 JDBC核心技术 第1章:JDBC概述 1.1 数据的持久化 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应用,数据持久化意味着将 ...

  10. C# windows服务知识集锦

    最近公司项目,本人也是刚接触windows服务,现在把这两天上网学习的一些资料拿出来与大家分享. 1).关于windows服务安装包的制作和自动启动服务 http://blog.csdn.net/re ...