当前位置: 首页 > news >正文

《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 进行 实时编译 的方法,因为这不需要先关闭虚幻引擎编辑器然后再重新启动以检验代码编译后的效果。


相关文章:

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

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

【运维测试】移动测试自动化知识总结第1篇:移动端测试介绍(md文档已分享)

本系列文章md笔记(已分享)主要讨论移动测试相关知识。主要知识点包括:移动测试分类及android环境搭建,adb常用命令,appium环境搭建及使用,pytest框架学习,PO模式,数据驱动&#xff0…...

高校疫情防控系统的全栈开发实战

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…...

OpenTitan- 开源安全芯片横空出世

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

简单的edge浏览器插件开发记录

今天在浏览某些网页的时候,我想要屏蔽掉某些信息或者修改网页中的文本的颜色、背景等等。于是在浏览器的控制台中直接输入JavaScript操作dom完成了我想要的功能。但是每次在网页之间跳转该功能都会消失,我需要反复复制粘贴js脚本,无法实现自动…...

WSL下如何使用Ubuntu本地部署Vits2.3-Extra-v2:中文特化修复版(新手从0开始部署教程)

环境: 硬: 台式电脑 1.cpu:I5 11代以上 2.内存16G以上 3.硬盘固态500G以上 4.显卡N卡8G显存以上 20系2070以上 本案例英伟达4070 12G 5.网络可连github 软: Win10 专业版 19045以上 WSL2 -Ubuntu22.04 1.bert-Vits2.3 Extra-v2:…...

Go语言的100个错误使用场景(40-47)|字符串函数方法

前言 大家好,这里是白泽。 《Go语言的100个错误以及如何避免》 是最近朋友推荐我阅读的书籍,我初步浏览之后,大为惊喜。就像这书中第一章的标题说到的:“Go: Simple to learn but hard to master”,整本书通过分析100…...

Fluke ADPT 连接器新增对福禄克万用 Fluke 15B Max 的支持

所需设备: 1、Fluke ADPT连接器; 2、Fluke 15B Max; Fluke 15B Max拆机图: 显示界面如下图: 并且可以将波形导出到EXCEL: 福禄克万用表需要自己动手改造!!!...

前端工程化面试题 | 10.精选前端工程化高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

【并发编程】AQS原理

📝个人主页:五敷有你 🔥系列专栏:并发编程 ⛺️稳中求进,晒太阳 1. 概述 全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架 特点: 用 state 属性来表示资源的状…...

AI:130-基于深度学习的室内导航与定位

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…...

Leetcode1423.可获得的最大点数

文章目录 题目原题链接思路(逆向思维) 题目 原题链接 Leetcode1423.可获得的最大点数 思路(逆向思维) 由题目可知,从两侧选k张,总数为n张,即从中间选n - k张 nums总和固定,要选k张最…...

深度学习之梯度下降算法

梯度下降算法 梯度下降算法数学公式结果 梯度下降算法存在的问题随机梯度下降算法 梯度下降算法 数学公式 这里案例是用梯度下降算法,来计算 y w * x 先计算出梯度,再进行梯度的更新 import numpy as np import matplotlib.pyplot as pltx_data [1.0,…...

代码随想录第32天|● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

文章目录 买卖股票思路一:贪心代码: 思路:动态规划代码: 跳跃游戏思路:贪心找最大范围代码: 跳跃游戏②思路:代码: 方法二:处理方法一的特殊情况 买卖股票 思路一&#x…...

线性代数的本质 2 线性组合、张成的空间、基

基于3Blue1Brown视频的笔记 一种新的看待方式 对于一个向量,比如说,如何看待其中的3和-2? 一开始,我们往往将其看作长度(从向量的首走到尾部,分别在x和y上走的长度)。 在有了数乘后&#xff0…...

- 工程实践 - 《QPS百万级的有状态服务实践》01 - 存储选型实践

本文属于专栏《构建工业级QPS百万级服务》 《QPS百万级的无状态服务实践》已经完成。截止目前为止,支持需求“给系统传入两个日期,计算间隔有多少天”的QPS百万级服务架构已经完成。如图1: 图1 可是这个架构不能满足需求“给系统传入两个日期…...

SECS/GEM的HSMS通讯?金南瓜方案

High Speed SECS Message Service (HSMS) 是一种基于 TCP/IP 的协议,它使得 SECS 消息通信更加快速。这通常用作设备间通信的接口。 HSMS 状态逻辑变化(序列): 1.Not Connected:准备初始化 TCP/IP 连接,但尚…...

wayland(xdg_wm_base) + egl + opengles——dma_buf 作为纹理数据源(五)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、EGL dma_buf import 相关的数据结构和函数1. EGLImageKHR2. eglCreateImageKHR()3. glEGLImageTargetTexture2DOES()二、egl 中 import dma_buf 作为纹理的代码实例1. egl_wayland_dmabuf_…...

【VTKExamples::PolyData】第二十八期 LinearExtrusion

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例LinearExtrusion,并解析接口vtkLinearExtrusionFilter,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 目录…...

Linux操作系统基础(五):Linux的目录结构

文章目录 Linux的目录结构 一、Linux目录与Windows目录区别 二、常见目录介绍(记住重点) Linux的目录结构 一、Linux目录与Windows目录区别 Linux的目录结构是一个树型结构 Windows 系统 可以拥有多个盘符, 如 C盘、D盘、E盘 Linux 没有盘符 这个概…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

GitHub 趋势日报 (2025年06月08日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言: 类加载器 1. …...

从零开始了解数据采集(二十八)——制造业数字孪生

近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...