《UE5_C++多人TPS完整教程》学习笔记16 ——《P17 菜单类(The Menu Class)》

2024-02-15 19:44

本文主要是介绍《UE5_C++多人TPS完整教程》学习笔记16 ——《P17 菜单类(The Menu Class)》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


本文为B站系列教学视频 《UE5_C++多人TPS完整教程》 —— 《P17 菜单类(The Menu Class)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C++ Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者)为 游戏引擎能吃么。


文章目录

  • P17 菜单类
  • 17.1 创建菜单类
  • 17.2 创建菜单控件
  • 17.3 Summary


P17 菜单类

本节课我们将创建一个菜单类,并设置它作为(用户界面)控件蓝图(Widget blueprint)的父类;我们还将在菜单中添加点击后可以 “创建(游戏会话)” 和 “加入(游戏会话)” 的按钮。
在这里插入图片描述


17.1 创建菜单类

  1. 我们可以在具体的游戏项目中制作菜单,也可以在我们创建的多人会话插件中制作,这样做的好处在于我们将插件移植到另一个游戏项目时,菜单就已经构建好了,不需要重新构建,只需要根据另一个游戏项目来配置一些设置(例如最大连接数、匹配类型等)即可

  2. 在虚幻引擎内容浏览器中展开目录 “Plugins/MultiplayerSessionsC++类/MultiplayerSessions/Public”,添加一个新的用户控件 “UserWidget” C++ 类。
    在这里插入图片描述

  3. 将新添加的用户控件 C++ 类命名为 “Menu”,选择模块为插件 “MultiplayerSessions (Runtime)”。
    在这里插入图片描述

  4. 点击“创建类”,VS 中出现弹窗,选择 “全部重新加载”。
    在这里插入图片描述

  5. 添加模块 “UMG”、“Slate”、“SlateCore” 到构建文件 “MultiplayerSessions.Build.cs” 的公共依赖项中,然后生成解决方案,这样我们在访问与 “UMG” 相关的模块时,就可以避免编译错误。
    在这里插入图片描述

  6. 在 “Menu.h” 中定义构造函数 “MenuSetup()”。

    // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
    #include "Blueprint/UserWidget.h"
    #include "Menu.generated.h"/*** */
    UCLASS()
    class MULTIPLAYERSESSIONS_API UMenu : public UUserWidget
    {GENERATED_BODY()
    /* P17 菜单类(The Menu Class)*/
    public:UFUNCTION(BlueprintCallable)void MenuSetup();
    /* P17 菜单类(The Menu Class)*/
    };
    
  7. 在 “Menu.cpp” 中完善构造函数 “MenuSetup()” 定义,然后进行编译。

    // Fill out your copyright notice in the Description page of Project Settings.#include "Menu.h"/* P17 菜单类(The Menu Class)*/
    void UMenu::MenuSetup()
    {AddToViewport();							// 添加到视口SetVisibility(ESlateVisibility::Visible);	// 设置菜单可见bIsFocusable = true; 						// 允许鼠标点击的时候聚焦UWorld* World = GetWorld();if (World){APlayerController* PlayerController = World->GetFirstPlayerController();	// 获取玩家控制器指针if (PlayerController){FInputModeUIOnly InputModeSettings;	// 用于设置只允许控制 UI 的输入模式// 输入模式设置InputModeSettings.SetWidgetToFocus(TakeWidget());	// 设置焦距,TakeWidget()将获取底层的 slate 部件,如果不存在则构造它InputModeSettings.SetLockMouseToViewportBehavior(EMouseLockMode::DoNotLock);	//设置鼠标在视口时不锁定// 将设置好的输入模式传送到到玩家控制器的输入模式PlayerController->SetInputMode(InputModeSettings);	// 设置玩家控制器的输入模式PlayerController->SetShowMouseCursor(true);			// 显示鼠标光标}}
    }
    /* P17 菜单类(The Menu Class)*/
    

17.2 创建菜单控件

  1. 在虚幻引擎内容浏览器中展开目录 “Plugins/MultiplayerSessions内容”,选择添加一个控件蓝图“WidgetBlueprint” 类,在 “选中新控件蓝图的根控件” 窗口中选择 “Menu”,然后将新生成的控件蓝图命名为 “WBP_Menu”。
    在这里插入图片描述
    在这里插入图片描述

  2. 双击 “WBP_Menu” 图标,进入用户控件设计器窗口。与教学视频中 “WBP_Menu” 自带 “画布画板”(Canavs Panel)不同,我们需要手动添加,在左侧 “控制板” 面板展开 “面板” 选项卡,将 “画布画板”拖拽到设计器当中,然后拖拽 “画布画板” 右下角双向箭头调整分辨率为 “1920 × 1080”。
    在这里插入图片描述

  3. 确定在左下 “层级” 面板中已经选中 “画布画板” 后,在 “控制板” 面板中将 “通用” 选项卡下的 “按钮”(Button)组件拖拽到设计器中,添加两个按钮 “HostButton” 和 “JoinButton”;接着在右侧 “细节” 面板中设置 “瞄点” (Anchors)在 “画布画板” 的中下方;然后设置 “HostButton” 的 “位置 X” 为 -650、“位置 Y” 为 -300、“尺寸 X” 为 350、“尺寸 Y” 为 100,设置 “JoinButton” 的 “位置 X” 为 -250、“位置 Y” 为 -300、“尺寸 X” 为 350、“尺寸 Y” 为 100。
    在这里插入图片描述

  4. 为按钮添加文字。在 “控制板” 面板中将 “通用” 中的 “文本”(Text)组件拖拽到 “HostButton" 上,在右侧 “细节” 面板中可以设置文本内容和字体样式。对 “JoinButton" 重复相同的工作,编译、保存。
    在这里插入图片描述

  5. 测试控件是否可用。转到 “ThirdPersonMap” 面板,在工具栏上点击 “蓝图”,然后在弹出的下拉菜单选中 “打开关卡蓝图”。
    在这里插入图片描述
    在关卡蓝图编辑器中绘制以下蓝图。
    在这里插入图片描述

  6. 使用 PIE 模式进行测试,可以看到我们创建的控件显示在视口当中。
    在这里插入图片描述


17.3 Summary

本节课首先在虚幻引擎中以用户控件 “UserWidget” C++ 类为父类,新建了 “Menu” 菜单类;此后我们在 VS 创建了 “Menu” 的构造函数 “MenuSetup()”,并完善其定义;接着我们添加一个以 “Menu” 为父类的控件蓝图“WidgetBlueprint” 类 “WBP_Menu”,并使用虚幻引擎用户控件设计器设计样式;最后我们为关卡 “ThirdPersonMap” 绘制蓝图以启用控件 “WBP_Menu”,测试了该控件的可用性。
在这里插入图片描述

17.1 创建用户控件类步骤 5 中,在访问与 “UMG” 相关的模块前,需要先添加模块 “UMG”、“Slate”、“SlateCore” 到构建文件 “MultiplayerSessions.Build.cs” 的公共依赖项中,这样可以避免编译错误。

17.2 创建菜单控件步骤 2 中,我们需要手动添加“画布画板”(Canavs Panel),在左侧 “控制板” 面板展开 “面板” 选项卡,将 “画布画板” 拖拽到设计器当中即可添加。


这篇关于《UE5_C++多人TPS完整教程》学习笔记16 ——《P17 菜单类(The Menu Class)》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/712353

相关文章

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL

SpringBoot整合OpenFeign的完整指南

《SpringBoot整合OpenFeign的完整指南》OpenFeign是由Netflix开发的一个声明式Web服务客户端,它使得编写HTTP客户端变得更加简单,本文为大家介绍了SpringBoot... 目录什么是OpenFeign环境准备创建 Spring Boot 项目添加依赖启用 OpenFeig

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

SpringBoot多数据源配置完整指南

《SpringBoot多数据源配置完整指南》在复杂的企业应用中,经常需要连接多个数据库,SpringBoot提供了灵活的多数据源配置方式,以下是详细的实现方案,需要的朋友可以参考下... 目录一、基础多数据源配置1. 添加依赖2. 配置多个数据源3. 配置数据源Bean二、JPA多数据源配置1. 配置主数据

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

SpringBoot中配置Redis连接池的完整指南

《SpringBoot中配置Redis连接池的完整指南》这篇文章主要为大家详细介绍了SpringBoot中配置Redis连接池的完整指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以... 目录一、添加依赖二、配置 Redis 连接池三、测试 Redis 操作四、完整示例代码(一)pom.