《UE5_C++多人TPS完整教程》学习笔记25 ——《P26 游戏项目创建(Project Creation)》

news2024/11/15 8:38:00

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


文章目录

  • P26 游戏项目创建
  • 26.1 创建游戏项目
  • 26.2 添加插件
  • 26.3 在关卡蓝图中使用插件
  • 26.4 对创建会话进行测试
  • 26.5 Summary


P26 游戏项目创建

本节课将创建一个新的虚幻引擎游戏项目,并为该项目添加我们的多人游戏插件,这样我们的项目可以连接 Steam 会话实现多人联网,以便后续进行游戏测试。
在这里插入图片描述


26.1 创建游戏项目

  1. 创建空白项目,名称为 “Blaster”。
    在这里插入图片描述
  2. 固定内容浏览器和 “Actor 放置浏览器” 到主界面中,这对进行项目开发很有用。
    在这里插入图片描述

26.2 添加插件

  1. 可以在课程的 Github 示例项目 下载多人游戏插件 “MultiplayerSessions” 并解压到项目目录下。这里笔者跟着前面的课程制作了多人游戏插件 “MultiplayerSessions”,因此直接将带有 “MultiplayerSessions” 的 “Plugins” 文件夹复制到项目目录下。
    在这里插入图片描述
    在这里插入图片描述

  2. 在虚幻引擎窗口最上方菜单栏选择 “编辑”,打开“插件”(Plugins)浏览器选项卡,启用(Enabled) “Online Subsystem Steam” 和 “”插件,重启虚幻引擎。
    在这里插入图片描述
    重启之后,可以发现 “Online Subsystem Steam” 插件已经启用,并且左侧栏中 “项目” 选项卡下多了 “Other” 选项,点击之后就可以看到我们的多人联机插件 “MultiplayerSessions”,启用该插件。
    在这里插入图片描述
    在这里插入图片描述

  3. 关闭虚幻引擎,在 “/Blaster/Config/” 目录下打开 “DefaultEnigne.ini”,在官方文档 《Online Subsystem Steam》中将示例的配置代码复制粘贴到 “DefaultEnigne.ini” 的后面。配置代码的含义参阅官方文档。

    [/Script/Engine.GameEngine]
    +NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
    
    [OnlineSubsystem]
    DefaultPlatformService=Steam
    
    [OnlineSubsystemSteam]
    bEnabled=true
    SteamDevAppId=480
    
    ; If using Sessions
    ; bInitServerOnClient=true
    
    [/Script/OnlineSubsystemSteam.SteamNetDriver]
    NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"	
    

    在这里插入图片描述

    NetDriverDefinitions 描述了可供UE使用的网络驱动器,并添加了以下属性:

    • DefName 是该网络驱动器定义的唯一名称。
    • DriverClassName 是主网络驱动器的类名称。
    • DriverClassNameFallBack 是退却网络驱动器的类名(如果主网络驱动器类初始化失败)。

    —— 虚幻引擎官方文档 《Online Subsystem Steam》

  4. 在 “/Blaster/Config” 目录下打开 “DefaultGame.ini”,设置最大玩家数为 100。

    
    [/Script/EngineSettings.GeneralProjectSettings]
    ProjectID=6A5F83AB4DEB75FB9BB586AC8DE40CDA
    ProjectName=Third Person Game Template
    
    [/Script/Engine.GameSession]
    MaxPlayers=100	
    

    在这里插入图片描述

  5. 使用 Visual Studio 打开 “Blaster.sln”,重新生成解决方案,注意需要先 关闭虚幻引擎。接着,在 “/Blaster/”项目目录删除 “Binaries” 、“Intermediate” 和 “Saved” 文件夹,在 “/Blaster/Plugins/MultiplayerSessions/” 插件目录删除 “Binaries” 和 “Intermediate” 文件夹。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  6. 鼠标右键单击项目文件 “Blaster.uproject”,在弹出的菜单栏中选择 “Generate Visual Studio Project Files” ,重新生成项目文件。
    在这里插入图片描述
    在这里插入图片描述

  7. 双击 “Blaster.uproject”,出现 “Missing Blaster Modules” 对话框,选择 “是(Y)”。
    在这里插入图片描述
    如果此时 Visual Studio 出现 “检测到文件修改” 对话框,选择 “全部重新加载(A)” 即可。
    在这里插入图片描述


26.3 在关卡蓝图中使用插件

  1. 在工具栏上点击 “蓝图”,然后在弹出的下拉菜单选中 “打开关卡蓝图”。
    在这里插入图片描述

  2. 在关卡蓝图编辑器中,从 “事件开始运行”(Begin Play)节点的输出引脚拖拽出一条线,连接 “创建控件”(Create Widget)节点,然后在该节点的 “Class” 选项下选择 “WBP_Menu”。
    在这里插入图片描述
    在这里插入图片描述

  3. 从 “创建控件”(Create Widget)节点(在该节点的 “Class” 选项下选择 “WBP_Menu” 就会后变成 “创建 WBP Menu 控件” 节点)的 “Return Value” 引脚处拖拽出一条线连接 “Menu Setup” 节点,下面我们将要对该节点的 “Lobby Path” 进行设置,即为游戏创建一个可供玩家等待其他玩家连接到游戏的 “大厅” 关卡。
    在这里插入图片描述

  4. 在 “Content” 目录下新建文件夹 “Maps”,将当前关卡保存至该文件夹下,并命名为 “GameStartupMap”。在虚幻引擎窗口最上方菜单栏选择 “编辑”,打开 “项目设置” 浏览器,然后在 “地图和模式” 选项卡下更改 “默认地图”(Default Maps)为 “GameStartupMap”,“编辑器开始地图”(Editor Startup Map)表示当编辑器启动时打开的地图,“游戏默认地图”(Game Default Map)表示项目打包后游戏默认加载的地图。。
    在这里插入图片描述
    在这里插入图片描述

  5. 新建 “Basic” 类型关卡 “Lobby”,笔者自己在场景中添加一个 “立方体”,目的是和 “GameStartupMap” 关卡区别开来,因为 “GameStartupMap” 和 “Lobby” 创建时都是 “Basic” 类型关卡,没有在场景添加任何 Actor 时都一样,我们在下面进行创建会话测试的时候就不知道是不是创建会话成功后真正地从 “GameStartupMap” 跳转至 “Lobby”。
    在这里插入图片描述
    在这里插入图片描述

  6. 在 “GameStartupMap” 关卡蓝图中设置 “Menu Setup” 节点的 “Lobby Path” 为 “/Game/Maps/Lobby
    在这里插入图片描述


26.4 对创建会话进行测试

  1. 如果是从课程的 Github 示例项目 下载的多人游戏插件 “MultiplayerSessions”,需要在 “MultiplayerSessionsSubsystem.cpp” 的 “CreateSession()” 函数中添加代码行 LastSessionSettings->bUseLobbiesIfAvailable = true;
    在这里插入图片描述
    使用虚幻引擎 5.0 版本可能需要删除 “DefaultGame.ini” 中的两行代码。在这里插入图片描述2. 将 “GameStartupMap” 和 “Lobby” 两张地图添加到 “项目设置” 的 “打包版本中要包括的地图列表” 选项中。
    在这里插入图片描述

  2. 打包项目。首先在项目目录下新建一个文件夹 “Build”,此后都将用于保存我们打包的项目;接着在虚幻引擎窗口点击工具栏的 “平台” 按钮,在下拉菜单栏中选择 “Windows”,然后选择 “打包项目”。
    在这里插入图片描述
    在这里插入图片描述

    如果打包项目时,出现下图中 “SDK未设置” 的错误提示 “Windows的SDK未正常安装,而其是生成数据的必需项。请检查主工具栏中“启动”菜单的SDK部分来更新SDK”,解决办法参见《UE5打包SDK未正确安装的问题》。
    请添加图片描述
    在这里插入图片描述

  3. 下载并安装 Steam 平台客户端(官方下载地址:https://store.steampowered.com/),然后注册账户进行登录。此过程可能需要科学上网,也可以下载 Watt Tookit(官方下载地址:https://steampp.net/) 加速。
    在这里插入图片描述

  4. 在 “/Build/Windows/” 文件夹下运行 “Blaster”,进入游戏初始界面后点击 “Host” 按钮创建会话,可以看见访问 Steam 成功,屏幕左上角消息提示创建会话成功,关卡也由 “GameStartupMap” 跳转至 “Lobby”。
    在这里插入图片描述
    在这里插入图片描述

    也可以在不对项目进行打包的情况下进行测试。在项目目录下右键单击 “Blaster.uproject”,在弹出的菜单栏选择 “Launch Game”,进入游戏后可以找到 Steam 在线子系统,点击按钮 “Host”,我们就可以前往大厅 “Lobby”。
    在这里插入图片描述


26.5 Summary

本节课我们创建一个新的虚幻引擎游戏项目 “Blaster”,并为该项目配置了我们的多人游戏插件;接着我们在游戏初始界面 “GameStartupMap” 的关卡蓝图中引入了插件,并在蓝图中设置游戏大厅关卡为 新创建的 “Lobby”,它可以作为玩家等待其他玩家连接游戏的地图。然后,我们将地图加入编译列表,尝试将项目进行打包,并对插件是否能正常创建会话进行了测试。
在这里插入图片描述
26.3 在关卡蓝图中使用插件 中,创建大厅关卡 “Lobby” 时为了和 “GameStartupMap” 区分开来,笔者在场景中添加一个 “立方体”,这样在进行创建会话测试时,就可以知道创建会话成功后游戏是否从 “GameStartupMap” 跳转至 “Lobby”。

26.4 对创建会话进行测试 中, 如果是从课程的 Github 示例项目 下载的多人游戏插件 “MultiplayerSessions”,需要在 “MultiplayerSessionsSubsystem.cpp” 的 “CreateSession()” 函数中添加代码行 LastSessionSettings->bUseLobbiesIfAvailable = true;
步骤 2 中,如果打包项目时,出现下图中 “SDK未设置” 的错误提示 “Windows的SDK未正常安装,而其是生成数据的必需项。请检查主工具栏中“启动”菜单的SDK部分来更新SDK”,解决办法参见《UE5打包SDK未正确安装的问题》。


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux信号】

目录 信号是什么Linux通过kill -l查看指令 信号的产生signal系统调用捕捉信号键盘产生信号系统调用产生信号进程异常产生信号软件条件发送信号 Code Dump信号保存信号抵达信号产生到信号抵达之间的状态叫信号未决。进程可以对信号进行阻塞使用sigprocmask()系统调用接口阻塞blo…

设计模式(九)模版方法模式

请直接看原文:设计模式(九)模版方法模式_模板方法模式的优缺点-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 1.模版方法模式简介 模版方法模式介…

【架构笔记2】设计不足和过度设计

复杂系统问题设计中有两类现象需要引起关注:设计不足和过度设计,通常第一种比较常见,第二种则也是一种灾难。当然我认为他们都可以被优化,如果用正确的流程引导,在框架模板的限定下放飞,就像教养孩子有个观…

Git实战(1)

一, git log 查看提交日志情况 根据 commitId进行版本回退 git reset --hard commitId(commitId可以是一部分,不用完整的ID) 只输出一行信息: git log --pretty=oneline 快速回退: git reset --hard HEAD^ 回退到上一个版本 git reset --hard HEAD^^ 回退到上上个版本 如果…

力扣74. 搜索二维矩阵(二分查找)

Problem: 74. 搜索二维矩阵 文章目录 题目描述思路复杂度Code 题目描述 思路 思路1:映射为一维数组二分查找 1.由于题目矩阵中的元素整体是升序的,我们可以将其放置在一个大小为 m n m \times n mn的一维数组array中进行二分查找 2.对应的映射关系是ar…

蓝桥杯备赛 day1 | 1. 门牌制作, 2. 迷宫, 3. 乘积尾零

最近正好在刷算法题&#xff0c;报了一个蓝桥杯体验一下&#xff0c;但是钱都交了&#xff0c;高低混个奖好吧&#xff0c;今天做的都是一些填空推理题&#xff0c;相当于用程序写下正解&#xff0c;代码是在Dev C上面写的 #include<iostream> #include<bits/stdc.h&g…

HikariCP与Spring Boot的完美集成,让您的应用更高效、更可靠!

随着Spring Boot的流行&#xff0c;越来越多的开发者选择使用它来构建高效、可扩展的应用程序。然而&#xff0c;在构建应用程序的过程中&#xff0c;数据库连接的管理也是一个非常重要的环节。在这篇文章中&#xff0c;我们将介绍如何将HikariCP这一高效的数据库连接池与Sprin…

性能对比:mysql 5.7-8.0-TiDB 7.5-OceanBase 4.2-MariaDB 10.11-机械硬盘-固态硬盘-

1.mysql 5.7-8.0 5.7比8.0优秀 结果&#xff1a;5.7比8.0优秀 10% 2.机械硬盘和固态硬盘 影响不大&#xff0c;主要是CPU 3. JAVA MYSQL 分开 4.『直属 MySQL 』vs 『Docker MySQL』 vs 『Podman MySQL』 直属最好 &#xff0c;其次是Podman&#xff0c;最后是DOCKER 5.MySQL …

Python光速入门 - Flask轻量级框架

FlASK是一个轻量级的WSGI Web应用程序框架&#xff0c;Flask的核心包括Werkzeug工具箱和Jinja2模板引擎&#xff0c;它没有默认使用的数据库或窗体验证工具&#xff0c;这意味着用户可以根据自己的需求选择不同的数据库和验证工具。Flask的设计理念是保持核心简单&#xff0c…

Qt/事件分发器/事件过滤器

事件分发器 //事件分发器bool event(QEvent* e); //事件分发器&#xff1a;&#xff1a;用途 分发事件 bool MyLabel::event(QEvent* e) {if(e->type() QEvent::MouseButtonPress){//如果是鼠标摁下 拦截事件 不向下分发QMouseEvent* ev static_cast<QMouseEvent*>…

【JS 算法题: 将 json 转换为字符串】

题目简介 其实就是手撕 JSON.stringfy()。 算法实现 输入 原则上来说&#xff0c;输入的是一个 json 对象。但需要考虑到异常情况&#xff0c;即输入了其它类型的数据&#xff0c;比如&#xff1a;12, true, ‘abc’, [‘red’, ‘green’], null, undefined 等。 输出 …

AGM CPLD (AGRV2K )的时钟(外部时钟和片上内部振荡器)

AGM CPLD &#xff08;AGRV2K &#xff09;的时钟(外部时钟和片上内部振荡器) 外部晶振 与 内部振荡器&#xff1a; mcu 和 cpld 联合编程时&#xff0c; 整颗芯片需要一颗外部晶振。 &#xff08;芯片有内部振荡器&#xff0c; 但误差较大&#xff0c; 校准后 5%以内误差&…

LSTM 长短期记忆递归神经网络

1、神经网络简介 1.1 神经网络起源 人工神经网络&#xff08;Aritificial Neural Networks, ANN&#xff09;是一种仿生的网络结构&#xff0c;起源于对人类大脑的研究。人工神经网络&#xff08;Aritificial Neural Networks&#xff09;也常被简称为神经网络&#xff08;Ne…

Vue3_2024_3天【Vue3组合式API~响应式及toRefs】

第一&#xff1a;vue3 中可以两个script标签 第一个&#xff1a;声明组件名 第二个&#xff1a;setup语法糖&#xff08;默认 lang语言是js语言&#xff0c;修改语言须保持一致&#xff09; 若想去掉一个script标签&#xff08;声明组件名称&#xff09;&#xff0c;则可使用插…

八. 实战:CUDA-BEVFusion部署分析-学习CUDA-BEVFusion推理框架设计模式

目录 前言0. 简述1. 回顾一下RAII是什么2. 实现类&#xff0c;接口类与命名空间3. CUDA-BEVFusion设计框架(namespace)4. CUDA-BEVFusion设计框架(接口类)5. CUDA-BEVFusion设计框架(实现类)6. CUDA-BEVFusion设计框架(各个类负责的内容)7. CUDA-BEVFusion中的接口函数和实现类…

failed to connect to ‘127.0.0.1:58526‘: Connection refused

WSA使用体验 链接&#xff1a; 知乎-穿越时间一步到位&#xff0c;教你完美安装Windows 11 Android 安卓子系统 CPU不满足要求 明明是12700H&#xff0c;满足要求&#xff0c;但是应用商店说不满足&#xff0c;在设置&#xff08;注意不是控制面板的区域&#xff09;把地区改…

ChatGPT 4.0使用之论文阅读

文章目录 阅读环境准备打开AskYourPDF进入主站 粗读论文直接通过右侧边框进行提问选中文章内容翻译或概括插图的理解 总结 拥有了GPT4.0之后&#xff0c;最重要的就是学会如何充分发挥它的强大功能&#xff0c;不然一个月20美元的费用花费的可太心疼了&#xff08;家境贫寒&…

HTML~

HTML HTML是一门语言&#xff0c;所有的网页都是用HTML这门语言编写出来的HTML(HyperText Markup Language):超文本标记语言 超文本:超越了文本的限制&#xff0c;比普通文本更强大。除了文字信息&#xff0c;还可以定义图片、音频、视频等内容 标记语言:由标签构成的语言 …

谨用ArrayList中的subList方法

谨用ArrayList中的subList方法 规范一&#xff1a; ArrayList 的 subList 结果不可强转成 ArrayList&#xff0c;否则会抛出 ClassCastException 异常&#xff1a; public static void test7() {List<Integer> list new ArrayList<>();list.add(1);list.add(2);…

云服务器无法Ping通解决

问题: 使用公网IP地址PING云服务器,无法PING通 但是可SSH到服务器,表示通信链路是正常的,可能是端口或路径规则未开放导致 登陆云服务器后台,进行安全组规则查看,发现ICMP没有放行 添加允许ICMP连接规则 成功PING通云服务器