向现有游戏菜单添加自定义按钮

向现有游戏菜单添加自定义按钮

本文介绍如何在已有菜单中添加一个与游戏原有按钮外观和行为相似的自定义按钮。教程假设读者已经了解如何创建蓝图 Mod。

来源:Dmgvol / UE_Modding 原文。

原文以 Ghostrunner 2 的 Extras 菜单为例:该菜单包含两个子按钮,目标是在列表中添加外观相同、但使用自定义文字和逻辑的新按钮。不同游戏的具体实现会有所不同。

原有菜单和子按钮

查找组件

示例的主菜单面板名为 BP_PanelStartMenu。在其中找到 Credits 子按钮,可以观察到组件类型 BP_PanelStartMenuSubButton_C、TitleText 等基本属性,以及容纳该组件的父对象 VerBoxExtrasButtons。

后续需要为这个子按钮的组件类型创建替身,才能在项目中按原结构访问它。

在面板中查找子按钮

原文指出,在 UE4 中即使组件的 IsVariable 为 false,也可以直接访问;UE5 则只能访问 IsVariable 组件,否则需要遍历 Widget 层级。

复制 Widget 结构

在原始文件夹中创建两个 Widget Blueprint,名称必须与游戏文件中的名称完全一致。某些情况下可以完整复制按钮设计,以获得更多控制。

在原路径中创建 Widget 蓝图

打开菜单按钮 Widget,复制所需字段、方法和委托。本例需要用于显示文字的 Text 类型变量 TitleText,以及检测点击的事件分发器或委托 OnClickDelegate。

复制按钮 Widget 的字段

设置标题和点击委托

不同游戏使用的委托或分发器可能不同。如果按钮 Widget 包含 UE 默认的 Button 组件,也可以绑定到该组件。

打开菜单面板的替身 Widget,在 Canvas Panel 中创建菜单按钮 Widget,位置不限。将它命名为 FModel 中完全一致的名称,并将其设为变量。

在面板替身中添加按钮 Widget

将按钮接入菜单

在 ModActor 中先检查当前地图;如果关卡名称不匹配,就销毁该 Mod。此逻辑适用于主菜单关卡,或持续存在于某一关卡中的菜单;暂停菜单需要其他检测逻辑。

检查当前关卡

菜单可能不会在关卡开始时立即加载,因此示例使用循环计时器持续查找菜单面板。

循环检测菜单面板

检测到面板后,创建按钮 Widget,设置标题文本等默认变量,绑定或处理按钮的 OnClick,最后将新按钮添加到原按钮的父对象中。

创建并连接新按钮

新按钮会出现在列表底部。实际使用时,不同游戏的现有菜单或系统可能需要额外逻辑。

菜单中新添加的按钮

相关示例

原文列出的应用包括 High On Life 的 FOV 滑块、Ghostrunner 2 的 Full Codex,以及 Ghostrunner Trainer。