欢迎您光临本站,秉承服务宗旨,履行"站长"责任,销售只是起点,服务永无止境!
也想出现在这里? 联系我们

轻松将自定义“项目设置”添加到虚幻引擎

作者 : qwe789 本文共3737个字,预计阅读时间需要10分钟 发布时间: 2023-01-31 共1.57K人阅读

轻松将自定义“项目设置”添加到虚幻引擎

您可能会将所有设置和可调整选项放在蓝图中,甚至可以在C++中硬编码。虚幻引擎确实可以选择使用开发者设置类在INI配置文件系统中轻松添加更多配置设置。您可能已经熟悉这些配置 INI 文件的存在。DefaultGame.ini、DefaultEngine.ini等都是使用这个类构建的,虚幻编辑器的项目设置和编辑器设置也使用这个系统。

虚幻引擎5.0中的新功能是DeveloperSettingsBackedByCVars,它增加了与控制台变量(CVars)和项目/编辑器设置的简单绑定。我将在这篇文章的底部解释这个新功能。

这个系统需要一些(基本的)C++来定义变量,所以即使没有编程经验,它也相对容易使用。

设置开发人员设置和配置文件

// Example of configuration file content. These files are located in MyProject/Config/*.ini

[/Script/ActionRoguelike.SSaveGameSettings]
SaveSlotName=SaveSlot03
DummyTablePath=/Game/ActionRoguelike/Monsters/DT_Monsters.DT_Monsters

通过从 UDeveloperSettings 派生新的 C++ 类,您可以轻松添加自己的类。[CategoryName] 将是你的项目 + 类名:[/Script/ActionRoguelike.SaveGameSettings],在我的开源 Action Roguelike GitHub 项目的情况下。

开发人员设置是一个模块。创建 UDeveloperSettings 派生类会自动将此模块添加到 .uproject 中。如果没有,或者您希望所有模块都在 .构建.cs文件,然后您应该手动添加开发人员设置。

配置文件使用键值对键=值,并支持文件路径甚至数组。我们将填充 FString 和资产路径,以通过 INI 文件分配数据表。

在C++中定义开发人员设置

您将在下面找到示例项目中的示例,请确保也将其公开给编辑器(EditAnywhere),以便它自动显示在项目设置中(请参见下面的屏幕截图)。

UCLASS(Config=Game, defaultconfig, meta = (DisplayName="Save Game Settings")) // Give it a better looking name in UI
class ACTIONROGUELIKE_API USSaveGameSettings : public UDeveloperSettings
{
	GENERATED_BODY()

public:
	/* Default slot name if UI doesn't specify any */ 
	UPROPERTY(Config, EditAnywhere, BlueprintReadOnly, Category = "General")
	FString SaveSlotName;
	
	/* Soft path will be converted to content reference before use */
	UPROPERTY(Config, EditAnywhere, BlueprintReadOnly, Category = "General", AdvancedDisplay)
	TSoftObjectPtr<UDataTable> DummyTablePath;

	USSaveGameSettings();
};

配置 – 将变量公开给顶部 UCLASS 中指定的 INI 文件(游戏 = 默认游戏.ini)

随处编辑 – 将其公开到“项目设置”窗口。

BlueprintReadOnly – 通过“GetClassDefaults”节点公开要在蓝图图中访问的变量。

默认配置 – “仅将对象配置保存到默认 INI,从不保存到本地 INI。(本地 INI 位于您的“我的项目/已保存/配置/...文件夹)

Config=Game – 存储在 DefaultGame.ini 中,其他示例包括引擎、输入。

轻松将自定义“项目设置”添加到虚幻引擎

要访问C++中的开发人员设置,我们使用 CDO(类默认对象),因为它已经自动为我们实例化并使用 GetDefault<T>() 访问;

void USSaveGameSubsystem::Initialize(FSubsystemCollectionBase& Collection)
{
	Super::Initialize(Collection);

	const USSaveGameSettings* SGSettings = GetDefault<USSaveGameSettings>(); // Access via CDO
	// Access defaults from DefaultGame.ini
	SlotName = SGSettings->SaveSlotName;

	// Make sure it's loaded into memory .Get() only resolves if already loaded previously elsewhere in code
	UDataTable* DummyTable = SGSettings->DummyTablePath.LoadSynchronous();
}

我们不能存储指向内容文件的直接指针,但我们可以使用软资产路径,并在需要时在代码中解析它们。确保您实际手动加载资产,否则它可能位于内存中,也可能不会位于内存中(例如,当您已经在当前编辑器会话中打开资产一次时)。

与C++和蓝图不同,配置文件的巧妙之处在于,这些值以纯文本形式存储,而不是编译为二进制。即使您已经打包了游戏,也可以轻松更改它们。

开发人员设置蓝图访问

使用 GetClassDefaults 节点获取对配置设置的只读访问权限非常容易。确保将变量标记为只读,以便它们显示。

轻松将自定义“项目设置”添加到虚幻引擎

游戏用户设置

如果要存储玩家可配置的设置,可以使用不同的类:游戏用户设置。此类已经包含一系列设置,包括图形选项。在这里,您可能需要添加鼠标灵敏度,FOV等。

DeveloperSettingsBackedByCVars

虚幻引擎5.0中的新功能是DeveloperSettingsBackedByCVars,它增加了与控制台变量(CVars)和项目/编辑器设置的简单绑定。

“自动发现的设置对象的基类,其中部分或全部设置存储在控制台变量而不是配置变量中。”– 来自虚幻引擎源代码。

这个新类使我们能够轻松地将控制台变量绑定到项目设置,并轻松地更改和存储每个开发人员或项目范围的默认值。

这方面的一个例子可以在UE5.0发布的令人难以置信的Lyra入门游戏中找到。LyraWeaponsDebugSettings 有几个用于调试跟踪命中的属性。通过使用 DeveloperSettingsBackedByCVars 和 ConsoleVariable 元说明符,您可以将变量绑定在一起。

// Should we do debug drawing for bullet traces (if above zero, sets how long (in seconds)
UPROPERTY(config, EditAnywhere, Category=General, meta=(ConsoleVariable="lyra.Weapon.DrawBulletTraceDuration")
float DrawBulletTraceDuration;

控制台变量仍在其他位置定义。在示例中,您可以在LyraGameplayAbility_RangedWeapon.cpp中找到 CVar:

namespace LyraConsoleVariables
{
	static float DrawBulletTracesDuration = 0.0f;
	static FAutoConsoleVariableRef CVarDrawBulletTraceDuraton(
		TEXT("lyra.Weapon.DrawBulletTraceDuration"),
		DrawBulletTracesDuration,
		TEXT("Should we do debug drawing for bullet traces (if above zero, sets how long (in seconds))"),
		ECVF_Default);
}

然后使用命名空间和静态浮点数(而不是设置文件中的变量)访问 CVar。

if (LyraConsoleVariables::DrawBulletTracesDuration > 0.0f)
{
	static float DebugThickness = 1.0f;
	DrawDebugLine(GetWorld(), StartTrace, EndTrace, FColor::Red, false, LyraConsoleVariables::DrawBulletTracesDuration, 0, DebugThickness);
}

这个新增功能可以很好地在项目设置中轻松设置默认值,无论是每次使用还是每个项目。所示示例指定 UCLASS(config=EditorPerProjectUserSettings) 为每个开发人员存储此内容。

版权声明:
本站所有文章、资源等一切内容,皆为在本站的注册网友所发布、上传、提供,如您发现任何内容侵犯了您的合法权益, 请与我们联系 ,我们将第一时间进行清理。iiiue.com 旨在为广大虚幻引擎爱好者提供技术交流学习、知识技术变现平台。
永久域名 iii ue .com 本站投稿能赚取收益变现提现,请一定要牢记账号密码!
Ue资源站 iiiue.com » 轻松将自定义“项目设置”添加到虚幻引擎

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有内容皆为网友发布,资源版权均属于原作者所有,如需商用请联系原作者获取授权许可,若由于商用引起版权纠纷,一切责任均由使用者承担。如您发现某些内容侵犯了您的合法权益, 请与我们联系 ,我们将在第一时间核实并清理。
下载的资源解压密码是多少?
任何资源的解压密码均由发布者提供,一般情况下都在资源的发布页面或者资源文件夹,请仔细检查,如您发现发布页面没有提供解压密码,请您试着在评论处留言联系作者,或者复制以下两个密码进行解压,或许会有意想不到的效果。
iiiue.com
ue5club
Tips:除了密码说明内的解压密码外,通常情况下,电脑在安装好RAR或360解压缩软件,双击打开压缩包,包内注释的网址也可以试试是否为解压密码哦
资源能否免费获取
本站用户可参与站内的一系列活动获取积分,资源皆可免费获取,若想快速获取可加入本站永久VIP钻石会员,荣耀身份,全站资源免费获取, 点此查看详情

发表回复

也想出现在这里? 联系我们
开通终身VIP 永久VIP折扣活动火热进行中,享全站资源免费下载特权!