创建暂停菜单

如何为游戏创建暂停菜单并编写脚本。

Choose your operating system:

Windows

macOS

Linux

在本指南中,您将了解如何为游戏创建暂停菜单并编写脚本。

若您从UMG UI 快速入门指南

[创建主菜单](programming-and-scripting/programming-language-implementation/cpp-in-unreal-engine/unreal-engine-cpp-tutorials/UMG/CreateMainMenu)
开始操作,则可以使用与此指南相同的项目。

创建游戏内暂停菜单

在本节中,我们将创建基本暂停菜单的可视布局。

  1. 打开您的 暂停菜单(Pause Menu) 控件蓝图。

  2. 设计器(Designer) 选项卡中,将控件从 控制板(Palette) 拖放到 层级(Hierarchy) 上,实现以下设置。

    ![](Pause1.png)

    在这里,我们使用一个 边框(Border),其中包含一个带 文本(Text)垂直方框(Vertical Box) 和两个在 画布面板(Canvas Panel) 上有 文本(Text)按钮(Button)

  3. 设计器(Designer) 窗口中,调整 边框(Border) 大小,使其填充整个虚线窗口(填充屏幕)。

    ![](InGamePause_5.3.png)

    您也可以在 细节(Details) 面板中的 笔刷颜色(Brush Color) 选项中更改颜色。

    ![](InGamePause_5.3.2.png)

    您还可能需要将颜色的 Alpha 设为 0.5,增添一些半透明度。当在游戏进程中打开暂停菜单时,边框将填充屏幕,而添加一些半透明度将使游戏依然在背景中可见。

  4. 而对于 细节(Details) 面板中的 边框(Border),请务必使用填充屏幕锚。

    ![](InGamePause_5.4.png)

    此举将确保边框能填充任意尺寸的屏幕。

  5. 层级(Hierarchy) 中选择 垂直方框(Vertical Box),然后在 细节(Details) 面板中使其同时水平和垂直居中。

    ![](InGamePause_5.5.png)

  6. 选择 垂直方框(Vertical Box) 下的 文本(Text),然后在 内容(Content)细节(Details) 面板中输入 暂停菜单(Pause Menu)

    ![](InGamePause_5.6.png)

  7. 为其他两个 文本(Text) 块输入 继续(Resume)退出(Quit)

    ![](Pause7.png)

  8. 按住 Ctrl 并在 层级(Hierarchy) 中选择两个 按钮(Button),然后在 细节(Details) 面板的 样式(Style) 下指定 悬停(Hovered) 的颜色。

    ![](InGamePause_5.8.png)

  9. 细节(Details) 面板中分别将 按钮(Button) 重命名为 继续(Resume)退出(Quit)

    ![](InGamePause_5.9.png)

编写暂停菜单功能脚本

完成外观设置之后,接下来我们将为暂停菜单提供脚本功能。

  1. 在控件蓝图编辑器(Widget Blueprint Editor)窗口的右上角单击 图表(Graph) 按钮。

  2. 我的蓝图(My Blueprint) 窗口中的 图表(Graph) 选项卡上,单击 退出按钮(QuitButton),然后在 细节(Details) 面板中添加一个 点击时执行(OnClicked) 事件。

    ![](PauseMenuFunctionality_5.2.png)

  3. 同样,为 继续按钮(ResumeButton) 添加一个 点击时执行(OnClicked) 事件。

  4. 图表(Graph) 窗口中 点击右键 并添加一个 Get Player Controller 节点。

    ![](PauseScript2.png)

  5. Get Player Controller 节点连出引线,使用 Set Input Mode Game Only 节点,然后从 Get Player Controller 节点连出引线,使用 Set Show Mouse Cursor 节点并将其设为 False,然后按以下方式连接 Remove from ParentSet Game Paused 节点。

    ![](PauseMenuFunctionality_5.5.png)

    此时,如点击 继续按钮(Resume Button) 时,输入模式将被设为纯游戏,暂停菜单(Pause Menu)被激活时显示的光标将被移除。Remove from Parent 节点用于在离开暂停状态之前从显示中移除实际的暂停菜单(Pause Menu)控件,其方式是使用 Set Game Pause 节点并不选中 Pause

  6. 创建一个名为 Remove HUD 的新 函数

    ![](PauseMenuFunctionality_5.6.png)

    当暂停菜单(Pause Menu)打开时,我们将使用此函数将游戏HUD从玩家的视图中移除。

  7. 在函数中添加一个 Get Player Character 节点并从 返回值(Return Value) 连出引线,添加 Cast ToFirstPersonCharacter 节点。

    ![](ScriptPauseMenu_5.7.png)

    这样我们便能访问正在被玩家使用的角色蓝图和游戏HUD。

  8. As First Person Character 节点连出引线,然后如下所示连接 Get HUD ReferenceRemove from Parent 节点。

    ![](PauseScript6.png)(w:840)

    这样便能访问玩家角色正在使用的HUD,并在退出游戏时将其从视口中移除。

  9. 事件图表(Event Graph) 上,从 Get Player Controller 节点连出引线,使用 Set Show Mouse Cursor 节点并设为 True

    ![](ScriptPauseMenu_5.9.png)(w:840)

    点击 退出(Quit) 后,返回主菜单(Main Menu)时将打开鼠标光标以便进行菜单导航。

  10. 接下来,添加上面创建的 Remove HUD 函数,然后添加 Open Level(设为 主(Main) 或主菜单(MainMenu)所在关卡的名称),并按如下方式进行连接。

    点击查看大图。现在两个按钮均已设好,最后需要做的便是允许玩家呼出暂停菜单并暂停游戏。

  11. 内容浏览器(Content Browser)Content/FirstPersonBP/Blueprints 下,打开 第一人称角色(FirstPersonCharacter) 蓝图。

    ![](PauseScript9.png)

  12. 在图表中添加一个 M 按键事件和一个 Create Widget 节点(设为 暂停菜单(Pause Menu)),并将 返回值(Return Value) 提升为变量。

    ![](PauseMenuFunctionality_5.12.png)

    虽然我们在这里使用了 M 键作为呼出暂停菜单的输入,但实际山可以设置任意键。我们称已被提升的变量为 暂停菜单引用(Pause Menu Reference),因其为创建的暂停菜单保存了一个引用。

  13. 按住 Ctrl我的蓝图(MyBlueprint) 窗口拖入该变量,并将其连接到一个 IsValid 节点。

    ![](PauseMenuFunctionality_5.13.png)

    现在,我们将查看暂停菜单(Pause Menu)控件是否已经创建并存储在该变量中。

  14. Is Not Valid 引脚连接到 Create PauseMenu_C Widget

    ![](PauseScript12.png)

  15. 点击右键 并添加 Get Player Controller 节点,然后添加 Set Show Mouse Cursor 并将其设为 True

  16. 再次从 Get Player Controller 节点连出引线,然后连接 Get Player Controller Set Input Mode UI Only,再如下所示连接这些节点。

    按下 M 时,如果之前已经访问过暂停菜单(Pause Menu),则不需要重新创建它,而是访问变量。如果这是第一次访问暂停菜单(Pause Menu),则系统将创建它,然后将它存储为一个变量,以便以后访问。无论是哪种情况,在显示暂停菜单之前输入模式将设为仅限UI(稍后我们会显示暂停菜单)。

  17. Pause Menu Reference 变量连出引线,使用 Add to Viewport 节点,然后选择 Set Game Paused(将 暂停(Paused) 设为 True)。

    点击查看大图。暂停菜单已经设好,现在开始测试。

  18. 点击 编译(Compile)保存(Save) 按钮,然后点击 运行(Play) 按钮在编辑器中运行。

进入游戏后,按下 M 键(或指定的任意键)便能使游戏暂停并呼出暂停菜单。从此开始,您可以用 继续(Resume) 按钮继续游戏进程,或者用 退出(Quit) 按钮返回主菜单(Main Menu)。

本文基于此前的虚幻引擎版本编写,未针对当前的虚幻引擎5.0版本更新过。