《UE5_C++多人TPS完整教程》学习笔记4 ——《P5 局域网连接(LAN Connection)》


本文为B站系列教学视频 《UE5_C++多人TPS完整教程》 —— 《P5 局域网连接(LAN Connection)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C++ Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者)为 游戏引擎能吃么。


文章目录

  • P5 局域网连接
  • 5.1 使用 C++ 编写函数实现 LAN 连接
  • 5.2 进行 LAN 连接测试
  • 5.3 Summary


P5 局域网连接

本节课将介绍如何使用 C++ 函数而非蓝图编程实现 《P4 测试多人游戏(Testing Mutiplayer)》 的 LAN 连接逻辑,并在两台设备上进行 LAN 连接测试。
在这里插入图片描述


5.1 使用 C++ 编写函数实现 LAN 连接

本小节将使用 C++ 函数而非蓝图编程实现 LAN 连接逻辑,然后在两台设备上进行 LAN 连接测试。

  1. 在虚幻引擎编辑器菜单栏中选择 “工具” ,然后在弹出的下拉菜单栏中点击 “打开 Visual Studio”。

    Notes
    需要先安装 Visual Studio Integration Tool 插件并在虚幻引擎插件浏览器窗口中启用 ,否则会出现错误提示 “增强型 Umreal Engine 支持需要使用免责的 Visual Studio Integration Tool 插件”。
    在这里插入图片描述
    安装方法参见官方文档《Install Visual Studio Tools for Unreal Engine》 以及 《解决ue4的Visual Studio Integration一直显示未安装》。

  2. 在右侧资源方案解决管理器中展开 “Games/MPTesting/Source/MPteting”,找到 “MPTestingCharacter.h”,添加打开 Lobby 关卡函数 “OpenLobby”,并使用 “UFUNCTION” 关键字设置该函数属性为 “BlueprintCallable”(蓝图可调用)。将光标移动至 “OpenLobby()”上,可以看到出现了一个 “刷子” 按钮,点击按钮,在弹出的下拉菜单栏中选择 “Create definition of 'OpenLobby' in MPTestingCharacter.cpp”,在 “MPTestingCharacter.cpp” 中就可以看到 Visual Studio 自动写好了函数定义的代码框架。同理再添加函数 “CallOpenLevel” 和 “CallClientTravel”,它们将以两种不同的方式进行 LAN 连接。

    /* P5 局域网连接(LAN Connection)*/
    UFUNCTION(BlueprintCallable)
    void OpenLobby() const;UFUNCTION(BlueprintCallable)
    void CallOpenLevel(const FString& Address);UFUNCTION(BlueprintCallable)
    void CallClientTravel(const FString& Address);
    /* P5 局域网连接(LAN Connection)*/
    

    在这里插入图片描述
    在这里插入图片描述

  3. 编写函数 “OpenLobby”、“CallOpenLevel” 和 “CallClientTravel”。

    /* P5 局域网连接(LAN Connection)*/
    void AMPTestingCharacter::OpenLobby() const
    {UWorld* World = GetWorld();	if (World) {// Uworld->ServerTravel:https://docs.unrealengine.com/5.0/en-US/API/Runtime/Engine/Engine/UWorld/ServerTravel/World->ServerTravel("/Game/ThirdPerson/Maps/Lobby?listen");	// 作为监听服务器打开 Lobby 关卡}
    }void AMPTestingCharacter::CallOpenLevel(const FString& Address)
    {// UGameplayStatics::OpenLevel: https://docs.unrealengine.com/5.0/en-US/API/Runtime/Engine/Kismet/UGameplayStatics/OpenLevel/// 先添加头文件 "#include "Kismet/GameplayStatics.h""UGameplayStatics::OpenLevel(this, *Address);}void AMPTestingCharacter::CallClientTravel(const FString& Address)
    {APlayerController* PlayerController = GetGameInstance()->GetFirstLocalPlayerController();if (PlayerController) {PlayerController->ClientTravel(Address, ETravelType::TRAVEL_Absolute); // UGameplayStatics::OpenLevel 接收 FNanme 类型输入而 PlayerController->ClientTravel 接收 FString 类型输入}
    }
    /* P5 局域网连接(LAN Connection)*/
    

    Notes
    通过在内容浏览器中悬停鼠标至 Lobby 上可以查看相对路径 "/Game/ThirdPerson/Maps/Lobby?listen"
    在这里插入图片描述
    进行 PIE 测试时出现以下报错信息,Lobby 关卡无法打开,但将项目打包后运行可以正常打开,具体原因未知。
    在这里插入图片描述

  4. 代码写好后进行编译并生成解决方案。这里有两种方案:
    ① 离线编译(不推荐):需要先关闭虚幻引擎编辑器,否则会报错(见下图),然后在 Visual Studio 菜单栏中选择 “生成(B)”,在下拉菜单栏中点击 “生成解决方案(B)   F7” 或 “重新生成解决方案(B)   Ctrl+Alt+F11” ;或者直接像教学视频那样使用快捷键 Ctrl+Shift+B。
    在这里插入图片描述
    实时编译(※,强烈推荐):使用快捷键 Ctrl+Alt+F11,编译过程会弹出虚幻引擎的 Live Coding 窗口,无需先关闭虚幻引擎编辑器然后再重启打开项目进行代码的测试。
    在这里插入图片描述

  5. 转到 “BP_ThirdPersonCharacter” 蓝图编辑器窗口,删除先前从节点 “1”、“2” “Pressed” 引脚处连接的节点,然后再分别从节点 “1”,“2”,“3” 的 “Pressed” 引脚处连接我们自己新定义的节点 “OpenLobby”、“CallOpenLevel” 和 “CallClientTravel”,并且修改“CallOpenLevel” 和 “CallClientTravel” 的 “Address” 选项为本机(设备1) IP 地址。最后,点击工具栏上的 “编译” 和 “保存” 按钮。
    在这里插入图片描述


5.2 进行 LAN 连接测试

本小节将将项目打包后在两台不同的设备上测试 LAN 连接。

  1. 在设备 1 上将项目打包后运行 “MPTesting.exe”,在游戏窗口打开后按下 “1” 键,可以看到成功由默认关卡 “ThirdpersonMap” 跳转到关卡 “Lobby”。
    在这里插入图片描述
    在这里插入图片描述

  2. 将打包好的项目发送到另一台设备(设备 2)上,进行 LAN 连接测试。在设备 2 上运行 “MPTesting.exe”,在游戏窗口打开后按下 “2” 键或 “3” 键,均可以看到成功由默认关卡 “ThirdpersonMap” 跳转到设备1的关卡 “Lobby”,并且关卡中有两个 Character,说明前文的两种 LAN 连接方式均可行。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述


5.3 Summary

本节课介绍了如何使用 C++ 函数而非蓝图编程实现 《P4 测试多人游戏(Testing Mutiplayer)》 的 LAN 连接逻辑以及在两台设备上再次进行 LAN 连接测试。
在这里插入图片描述

5.1 使用 C++ 编写函数实现 LAN 连接步骤 1 中,打开 Visual Studio 时如果出现错误提示 “增强型 Umreal Engine 支持需要使用免责的 Visual Studio Integration Tool 插件”,则需要先安装好 Visual Studio Integration Tool 插件,可以参阅官方文档《Install Visual Studio Tools for Unreal Engine》。
步骤 4 中编译项目时推荐使用按下快捷键 Ctrl + Alt + F11 进行 实时编译 的方法,因为这不需要先关闭虚幻引擎编辑器然后再重新启动以检验代码编译后的效果。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/465678.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源】SpringBoot框架开发APK检测管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 开放平台模块2.3 软件档案模块2.4 软件检测模块2.5 软件举报模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 开放平台表3.2.2 软件档案表3.2.3 软件检测表3.2.4 软件举报表 四、系统展示五、核心代…

【更新】企业数字化转型-年度报告175个词频、文本统计

数据说明: 这份数据含数字化转型175个词频、各维度水平,保留2000-2021年数据。参考吴非、赵宸宇两位老师做法,根据上市公司年报文本,整理数字化转型175个词频数据,希望对大家有所帮助。 参考管理世界中吴非&#xff…

前端JavaScript篇之对象创建的方式有哪些?

目录 对象创建的方式有哪些?1. 工厂模式:2. 构造函数模式:3. 原型模式:4. 混合模式:5. 动态原型模式:6. 寄生构造函数模式:7. 字面量方式: 对象创建的方式有哪些? JavaS…

微软和苏黎世联邦理工学院开源SliceGPT创新压缩技术节省大量部署资源;OpenAI成立儿童安全团队,防AI误用

🦉 AI新闻 🚀 微软和苏黎世联邦理工学院开源SliceGPT创新压缩技术节省大量部署资源 摘要:微软和苏黎世联邦理工学院研究人员开源了SliceGPT,通过对大模型的权重矩阵进行压缩切片,实现了模型紧缩,节省了部…

【MySQL】-18 MySQL综合-4(MySQL储存引擎精讲+MySQL数据类型简介+MySQL整数类型+MySQL小数类型)

MySQL储存引擎精讲MySQL数据类型简介MySQL整数类型MySQL小数类型 十一 MySQL存储引擎精讲11.1 什么是存储引擎11.2 MySQL 5.7 支持的存储引擎11.3 如何选择 MySQL 存储引擎11.4 MySQL 默认存储引擎 十二 MySQL数据类型简介12.1 MySQL 常见数据类型1) 整数类型2) 日期/时间类型3…

C语言--------数据在内存中的存储

1.整数在内存中的存储 整数在内存是以补码的形式存在的; 整型家族包括char,int ,long long,short类型; 因为char类型是以ASCII值形式存在,所以也是整形家族; 这四种都包括signed,unsigned两种,即有符号和无符号&am…

nodejs爬虫框架

nodejs爬虫框架 在Node.js中,有一些常用的爬虫框架可以帮助你实现网页抓取和数据提取的任务。以下是几个流行的Node.js爬虫框架: 1. **Puppeteer**: Puppeteer 是由 Google 开发的一个用于控制 headless Chrome 或 Chromium 浏览器的 Node.js 库。它提供…

数据库管理-第149期 Oracle Vector DB AI-01(20240210)

数据库管理149期 2024-02-10 数据库管理-第149期 Oracle Vector DB & AI-01(20240210)1 机器学习2 向量3 向量嵌入4 向量检索5 向量数据库5 专用向量数据库的问题总结 数据库管理-第149期 Oracle Vector DB & AI-01(20240210&#xf…

项目02《游戏-14-开发》Unity3D

基于 项目02《游戏-13-开发》Unity3D , 任务:战斗系统之击败怪物与怪物UI血条信息 using UnityEngine; public abstract class Living : MonoBehaviour{ protected float hp; protected float attack; protected float define; …

掌握高效秘诀:揭秘从容应对多任务管理的终极妙招

多任务管理是非常重要的技能,然而如何平衡任务和时间仍然是许多人的挑战。进行多任务管理一般可以从设定目标和清单、排除无关任务、执行任务的时间块化、利用团队合作、学会任务切换几个方面出发,在本文中我们将详细介绍如何利用有效的多任务管理技巧来…

题目练习(生死时速2.0版)

题目一(Before an Exam) 题意翻译 题目背景 明天皮特将要考生物。他并不很喜欢生物,但在 d 天前他得知他将不得不参加此次考试。皮特严厉的父母勒令他立即复习,因此他在第 i 天将需要学习不少于 minTimei​ 小时,不…