当前位置: 首页 > article >正文

【UE5 C++课程系列笔记】16——DeveloperSettings(开发者设置)的基本使用——创建配置文件

概念

  DeveloperSettings 是一种用于存储项目级别的开发相关设置和配置信息的机制。它允许开发者在虚幻引擎项目中定义一些全局的、可调整的参数,这些参数通常与项目的开发过程、调试或者特定功能的配置相关,并且可以方便地在编辑器环境下进行可视化编辑,无需直接修改代码就能改变这些设置,极大地提高了开发的灵活性和便利性,尤其适用于在开发阶段快速调整各种参数以进行测试、调试以及优化工作。

        例如,开发者可以通过 DeveloperSettings 来设置游戏中的调试显示选项(如显示碰撞体、显示导航网格等)、性能分析相关的采样频率、特定功能模块的开关(比如是否开启某个实验性的游戏玩法功能等)等各种内容,不同的项目可以根据自身需求定制不同的 DeveloperSettings 类来管理对应的设置信息。

基本使用(创建配置文件)

1. 新建一个空白C++类,这里命名为“SampleSettings”

2. 打开“xxx.Build.cs”文件

添加“DeveloperSettings”模块

3. 在“SampleSettings.h”中引入“DeveloperSettings.h”

继续在“SampleSettings.h”中添加如下代码:

SampleSettings 继承UDeveloperSettings。UCLASS宏包括的两个参数的意思分别为:

  Config = SampleSettings 参数含义:这个参数指定了该类所对应的配置分类名称为 SampleSettings。在UE中,不同的配置分类可以用于区分不同用途、不同模块的配置信息,例如常见的有 Engine(用于引擎相关配置)、Game(针对游戏层面的配置)等,这里定义的 SampleSettings 就创建了一个自定义的配置分类,后续该类中定义的所有设置变量相关的配置信息都会存储在这个分类下的配置文件中(不同平台对应的配置文件位置和格式会有所不同)。

  defaultconfig 参数含义:表示这个类将会被用于存储默认配置信息,即当项目首次创建或者在没有其他特定配置覆盖的情况下,该类所定义的设置变量会采用默认的值(不过目前类里还没定义具体变量,后续添加变量后就可以为其设置默认值了)。同时,这个设置也使得该类能够在项目配置的整体体系中扮演提供默认配置的角色,方便在不同的开发环境或者项目部署场景下进行统一的默认设置管理。

添加构造函数:

实现 USampleSettings 类的构造函数如下。这里它接收一个 FObjectInitializer 类型的参数 ObjectInitializer,该参数在UE中常用于传递对象初始化相关的各种设置信息,比如可以通过它来控制对象创建时是否自动创建某些默认的组件、是否应用特定的属性初始化值等。在构造函数中,通过 :Super(ObjectInitializer) 的语法调用了UDeveloperSettings父类的构造函数,并将 ObjectInitializer 参数传递过去,这是 C++ 中派生类构造函数初始化列表的写法。

重写“UDeveloperSettings”父类的“GetContainerName”、“GetCategoryName”和“GetSectionName”方法。其中,函数“GetContainerName”用于返回 USampleSettings 类在配置体系中所属的容器名称;“GetCategoryName”用于指定 USampleSettings 类在配置分类方面的名称;“GetSectionName”用于指定 USampleSettings 类在具体配置章节方面的名称。

这里设置容器名称为“Project”,分类名称为“Test”,章节名称为“SampleSetting”

4. 编译后在项目设置中可以看到如下界面

5. 声明一个名为 GetXunFeiCoreSettings 的静态函数,该函数的返回值类型是指向 USampleSettings 类对象的指针

 6. 定义一个名为“FSampleDescriber”结构体,用于描述项目信息

定义如下三个变量,分别用于表示项目版本号、项目描述和项目名称

7. 编译后,可以看到项目设置“Test-》SampleSettings”中有如下选项。

修改“ProjectSimpleName”的值

此时可以看到在项目路径下的“Config”文件夹中生成了一个名为“DefaultSampleSettings.ini”的文件

打开后内容如下:

 

“SampleSetting”完整代码:

“SampleSetting.h”

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Engine/DeveloperSettings.h"

#include "SampleSettings.generated.h"

USTRUCT(BlueprintType)
struct FSampleDescriber
{
	GENERATED_USTRUCT_BODY()

public:
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "ProjectInfo")
	FString AuthorName = TEXT("None");

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "ProjectInfo")
	bool bExperiment = false;
};


UCLASS(Config = SampleSettings, defaultconfig)
class STUDY_API USampleSettings : public UDeveloperSettings
{
	GENERATED_BODY()

public:
	USampleSettings(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());

public:
	virtual FName GetContainerName() const;

	virtual FName GetCategoryName() const;

	virtual FName GetSectionName() const;

public:
	static USampleSettings* GetXunFeiCoreSettings();

public:
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
	FString ProjectVersion = TEXT("1.0.0");

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
	FSampleDescriber SampleDescribe;

	UPROPERTY(Config, EditAnywhere, BlueprintReadWrite)
	FString ProjectSimpleName = TEXT("Sample");
};
// Fill out your copyright notice in the Description page of Project Settings.


#include "Config/SampleSettings.h"

USampleSettings::USampleSettings(const FObjectInitializer& ObjectInitializer):Super(ObjectInitializer)
{

}

FName USampleSettings::GetContainerName() const
{
	return TEXT("Project");
}

FName USampleSettings::GetCategoryName() const
{
	return TEXT("Test");
}

FName USampleSettings::GetSectionName() const
{
	return FName("SampleSetting");
}

USampleSettings* USampleSettings::GetXunFeiCoreSettings()
{
	USampleSettings* Settings = GetMutableDefault<USampleSettings>();
	return Settings;
}

http://www.kler.cn/a/459285.html

相关文章:

  • Flask 快速入门
  • git:指令集
  • vim 的基础使用
  • 【paddle】初次尝试
  • 25.1.3
  • STM32 和 ESP32
  • 【linux进程】进程终止进程等待
  • CSS(层叠样式表)基础选择器,文字控制属性
  • SpringBoot发邮件(带附件)
  • 《Vue进阶教程》第二十九课:立即执行的回调
  • OpenTK 光照与材质详解
  • 瓷砖缺陷检测数据集,使用yolo,coco json,pasical voc xml格式标注,可识别边缘崩裂,破洞,裂缝等缺陷,一共7992张原始图
  • 批量新建日报表只需10秒-Excel易用宝
  • HarmonyOS初步探索
  • [羊城杯 2024]miaoro
  • 嵌入科技的温情
  • 你有哪些Deep Learning(RNN、CNN)调参的经验?
  • Mysql(MGR)和ProxySQL搭建部署-Docker版本
  • 《云原生安全攻防》-- K8s安全配置:CIS安全基准与kube-bench工具
  • 【Go】Go数据类型详解—map
  • 2024.12.30(多点通信)
  • C语言-找出数组中两个数字的和为该数字的位置
  • 大数据面试笔试宝典之HBase面试
  • ECMAScript基础
  • Cypress测试框架详解:轻松实现端到端自动化测试
  • 项目总结-ElasticSearch性能优化考虑点