创建主菜单

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

Windows
MacOS
Linux

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

若你从UMG UI快速入门指南 开始操作,则可以使用与此指南相同的项目。

创建主菜单

第一步是要创建主菜单视觉布局,创建过程如下。

  1. 打开 MainMenu 控件蓝图。

    如果你在创建主菜单蓝图时遇到了困难,你可以参照UMG UI 快速入门指南 寻找帮助。

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

    Hierarchy1.png

    作为参考,我们使用一个 图像(Image)、一个带 文本(Text)垂直框(Vertical Box),和3个在 画布面板(Canvas Panel) 上有 文本(Text) 的按钮。

    层级(Hierarchy) 窗格中,你可以根据控件类或命名来搜索,以便快速查找UI元素。

  3. 层级(Hierarchy) 中选择 垂直框(Vertical Box),然后 右键单击复制(Copy)

  4. 右键单击 画布面板(Canvas Panel) 并选择 粘贴(Paste),粘贴 垂直框(Vertical Box) 的第二个副本。

    Hierarchy2.png

  5. 在新的 垂直框(Vertical Box) 中,右键单击 复制一个 按钮(Button) 并粘贴它,创建第四个按钮/文本控件。

    Hierarchy3.png

  6. 细节(Details) 面板中选择第一个 垂直框(Vertical Box),将其重命名为 MainMenu,选中 isVariable 选项并将 ZOrder 设为 1

    CreatingAMenu_3.6.png

    为便于识别,我们将对控件进行命名,并将其设为一个变量,以便进行访问;同时,我们还将设置 ZOrder,以便它出现在稍后将设置的图像的顶部。

  7. 选择另一个 垂直框(Vertical Box),在 细节(Details) 面板中将其重命名为 Options,选中 isVariable 选项并将 ZOrder 设为 1

  8. 如下图所示,重命名各个 按钮(Button)

    Hierarchy5.png

    更新按钮的命名,我们便能了解每个按钮的功能,这样更易于为这些按钮编写脚本功能。

  9. 细节(Details) 面板中 内容(Content) 下的 文本(Text) 部分中,更新各个 文本(Text) 控件,如下所示。

    CreatingAMenu_3.9.png

    现在我们来更新每个按钮上显示的文本以及菜单标题。

  10. 按住 Ctrl,选择各个 按钮(Button),然后在 细节(Details) 面板中设置 悬停(Hovered)Tint(着色) 颜色,并逐个设为按 尺寸(Size) 进行 填充(Fill)

    CreatingAMenu_3.10.png

    在此,我们对所有按钮的尺寸进行调整,并定义鼠标悬停时按钮的颜色。

  11. 层级(Hierarchy) 中选择 图像(Image),然后在 细节(Details)外观(Appearance)笔刷(Brush) 下,选择一个要使用的 纹理(Texture)Sprite材质(Material)

    CreatingAMenu_3.11.png

    如你希望使用与此指南相同的设置,可于此处下载:示例背景 将示例背景拖放导入 虚幻引擎 (在确认提示上点击 是(Yes))。

  12. 设计器(Designer) 窗口中调整图像尺寸,使其将整个布局占满。

    Hierarchy9.png

  13. 图像(Image)细节(Details) 面板中,单击 锚(Anchor) 按钮并选择填充屏幕选项。你还可以使用Scalebox来保存图像,这将确保图像的尺寸适当缩放,以匹配高宽比。

    CreatingAMenu_3.13.png

  14. 选择两个 垂直框(Vertical Box) 并将它们的 锚(Anchor) 定在中间偏左位置。

    CreatingAMenu_3.14.png

  15. 选择 选项(Options) 垂直框,并将其 可视性(Visibility) 设为 隐藏(Hidden)

    CreatingAMenu_3.15.png

    我们不需要在默认情况下显示选项,只需通过脚本使其显示即可。

  16. 选择 主菜单(MainMenu) 垂直框,在 设计器(Designer) 窗口中按需要调整尺寸和位置。

    Hierarchy13.png

  17. 可从各个 Text 控件的 细节(Details) 面板中调整 字体(Font)尺寸(Size)对齐(Alignment)

    CreatingAMenu_3.17.png

    可对这些设置进行实验,以获得预期效果。

  18. 根据你的需要设置 选项(Options) 垂直框,然后将其直接移至你的 主菜单(Main Menu) 垂直框的后面。

    Hierarchy15.png

    因为一次只会显示其中一项,所以它们可以相互重叠。

菜单的视觉布局完成后,下一步我们将编写菜单功能的脚本。

编写主菜单脚本

下面我们来编写主菜单的功能脚本。在该步骤完成后,我们将能够使游戏启动并到达主菜单、开始游戏以及在选项菜单中更改分辨率。

  1. 打开 主菜单(MainMenu) 控件蓝图并单击 图表(Graph) 选项卡。

    ScriptingMainMenu_4.1.png

  2. 我的蓝图(MyBlueprint) 窗口中选择 运行按钮(PlayButton),然后在 细节(Details) 面板中单击 点击时执行(On Clicked) 旁的加号。

    ScriptingMainMenu_4.2.png

    此举会将一个节点添加至图表,一旦点击按钮便执行功能。

  3. 为各个按钮添加 点击时执行(On Clicked) 事件。

    ScriptingMainMenu_4.3.png

    我们已经在图表中排好按钮,清晰地模拟出菜单的布局。

  4. 离开 点击时执行(运行按钮)(OnClicked(PlayButton)),添加一个 OpenLevel(设为 FirstPersonExampleMap)节点和一个 Remove from Parent 节点。

    ScriptingMainMenu_4.4.png

    关卡命名(Level Name) 将指出要加载的关卡的命名(在本例中是First Person Example地图)。Remove from Parent 节点将从视口中移除 目标 控件蓝图。它被设为目标本身(即加载关卡后要从视图中移除的主菜单控件蓝图)。

  5. 按住 Ctrl 并拖入 MainMenuOptionsMenu 变量。

  6. MainMenu 连出引线并添加一个 Set Visibility 节点。将 不可视性(In Visibility) 设为隐藏(Hidden)。

  7. 连出引线并添加一个 Set Visibility 节点。将 不可视性(Invisibility) 设为可见(Visible)。

  8. 将目标附加到 OptionsMenu 变量。

    OptionsButton.png

    在选项按钮(Options Button)被点击时,我们将关闭主菜单(Main Menu),并打开选项菜单(Options Menu)。

  9. 在每个 设置(Settings) 按钮后连出引线,添加一个 Execute Console Command 节点。

  10. 针对每项的 命令(Command),使用 r.setRes XxY,其中X和Y是要使用的尺寸。

    Resolution.png

    在以上步骤中,我们使用了以下设置:640x4801280x7201920x1080

  11. 对于 返回按钮(Return Button) 重复步骤6,但进行相反的设置,使主菜单(Main Menu)可见,选项菜单(Options Menu)隐藏。

    ReturnButton.png

  12. 点击时执行(退出按钮)(OnClicked (QuitButton)) 后连出引线,添加一个 Execute Console Command 节点并设为命令 退出(Quit)

    QuitButton.png

  13. 编译(Compile)保存(Save),然后关闭控件蓝图。

  14. 内容浏览器(Content Browser) 中,打开 主(Main) 关卡,然后打开 关卡蓝图(Level Blueprint)

    ScriptingMainMenu_4.14.png

  15. 右键单击 图表,添加一个 Event Begin Play 节点,并连接一个 Create Widget 节点(将 类(Class) 设为 主菜单(Main Menu))。

    EventBeginPlay.png

  16. 连接一个 Add to Viewport 节点,并添加一个 Get Player Controller 节点。

  17. Get Player Controller 连出引线,添加 Set Show Mouse Cursor 节点并将其设为 True,然后 编译(Compile) 并关闭蓝图。

    FinishedLevel.png

  18. 打开 Content/FirstPersonBP/Blueprints 文件夹内的 第一人称角色(First Person Character) 蓝图。

  19. Event Begin Play 脚本之后添加一个 Get Player Controller 节点,然后添加一个 Set Input Mode Game Only 节点。

    PlayerCharacterBlueprint.png

    此举将关闭光标,并将玩家的输入设为仅限游戏(Game Only)。

  20. Set Input Mode Game Only 节点的输出引脚连接到 Branch 节点。

    ScriptingMainMenu_4.20.png

  21. 编译(Compile) 并关闭蓝图,然后打开 世界设置(World Settings)

    ScriptingMainMenu_4.21.png

  22. 游戏模式(Game Mode),将 游戏模式覆盖(GameMode Override) 设为 第一人称游戏模式(FirstPersonGameMode) 并将 默认Pawn类(Default Pawn Class) 更改为 角色(Character)

    ScriptingMainMenu_4.22.png

    因为我们不希望玩家能够在主菜单(Main Menu)后四处奔跑和射击,所以我们现在要为这张地图分配一个游戏模式,并更改玩家的角色,使其使用可玩的 第一人称角色(FirstPersonCharacter) 蓝图中的引擎默认角色。

  23. 单击主工具栏中的 运行(Play) 按钮,在编辑器中运行。如需测试分辨率选项,请从 在编辑器中运行(Play-in-Editor) 下拉菜单中选择 新建编辑器窗口(New Editor Window)

我们现在已经创建了功能齐全的主菜单,使玩家可以退出游戏、变更分辨率选项,或进行游戏(这将加载特定关卡并将玩家转到游戏进程中)。

Select Skin
Light
Dark

欢迎来到全新虚幻引擎4文档站!

我们正在努力开发新功能,包括反馈系统,以便您能对我们的工作作出评价。但它目前还未正式上线。如果您对此页面有任何意见与在使用中遭遇任何问题,请前往文档反馈论坛告知我们。

新系统上线运行后,我们会及时通知您的。

发表反馈意见