本文为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 创建游戏项目
- 创建空白项目,名称为 “
Blaster
”。
- 固定内容浏览器和 “Actor 放置浏览器” 到主界面中,这对进行项目开发很有用。
26.2 添加插件
-
可以在课程的 Github 示例项目 下载多人游戏插件 “
MultiplayerSessions
” 并解压到项目目录下。这里笔者跟着前面的课程制作了多人游戏插件 “MultiplayerSessions
”,因此直接将带有 “MultiplayerSessions
” 的 “Plugins
” 文件夹复制到项目目录下。
-
在虚幻引擎窗口最上方菜单栏选择 “编辑”,打开“插件”(Plugins)浏览器选项卡,启用(Enabled) “
Online Subsystem Steam
” 和 “”插件,重启虚幻引擎。
重启之后,可以发现 “Online Subsystem Steam
” 插件已经启用,并且左侧栏中 “项目” 选项卡下多了 “Other
” 选项,点击之后就可以看到我们的多人联机插件 “MultiplayerSessions
”,启用该插件。
-
关闭虚幻引擎,在 “
/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》
-
在 “
/Blaster/Config
” 目录下打开 “DefaultGame.ini
”,设置最大玩家数为 100。[/Script/EngineSettings.GeneralProjectSettings] ProjectID=6A5F83AB4DEB75FB9BB586AC8DE40CDA ProjectName=Third Person Game Template [/Script/Engine.GameSession] MaxPlayers=100
-
使用 Visual Studio 打开 “
Blaster.sln
”,重新生成解决方案,注意需要先 关闭虚幻引擎。接着,在 “/Blaster/
”项目目录删除 “Binaries
” 、“Intermediate
” 和 “Saved
” 文件夹,在 “/Blaster/Plugins/MultiplayerSessions/
” 插件目录删除 “Binaries
” 和 “Intermediate
” 文件夹。
-
鼠标右键单击项目文件 “
Blaster.uproject
”,在弹出的菜单栏中选择 “Generate Visual Studio Project Files
” ,重新生成项目文件。
-
双击 “
Blaster.uproject
”,出现 “Missing Blaster Modules
” 对话框,选择 “是(Y)”。
如果此时 Visual Studio 出现 “检测到文件修改” 对话框,选择 “全部重新加载(A)” 即可。
26.3 在关卡蓝图中使用插件
-
在工具栏上点击 “蓝图”,然后在弹出的下拉菜单选中 “打开关卡蓝图”。
-
在关卡蓝图编辑器中,从 “事件开始运行”(Begin Play)节点的输出引脚拖拽出一条线,连接 “创建控件”(Create Widget)节点,然后在该节点的 “
Class
” 选项下选择 “WBP_Menu
”。
-
从 “创建控件”(Create Widget)节点(在该节点的 “
Class
” 选项下选择 “WBP_Menu
” 就会后变成 “创建WBP Menu
控件” 节点)的 “Return Value
” 引脚处拖拽出一条线连接 “Menu Setup
” 节点,下面我们将要对该节点的 “Lobby Path
” 进行设置,即为游戏创建一个可供玩家等待其他玩家连接到游戏的 “大厅” 关卡。
-
在 “
Content
” 目录下新建文件夹 “Maps
”,将当前关卡保存至该文件夹下,并命名为 “GameStartupMap
”。在虚幻引擎窗口最上方菜单栏选择 “编辑”,打开 “项目设置” 浏览器,然后在 “地图和模式” 选项卡下更改 “默认地图”(Default Maps)为 “GameStartupMap
”,“编辑器开始地图”(Editor Startup Map)表示当编辑器启动时打开的地图,“游戏默认地图”(Game Default Map)表示项目打包后游戏默认加载的地图。。
-
新建 “
Basic
” 类型关卡 “Lobby
”,笔者自己在场景中添加一个 “立方体”,目的是和 “GameStartupMap
” 关卡区别开来,因为 “GameStartupMap
” 和 “Lobby
” 创建时都是 “Basic
” 类型关卡,没有在场景添加任何 Actor 时都一样,我们在下面进行创建会话测试的时候就不知道是不是创建会话成功后真正地从 “GameStartupMap
” 跳转至 “Lobby
”。
-
在 “
GameStartupMap
” 关卡蓝图中设置 “Menu Setup
” 节点的 “Lobby Path
” 为 “/Game/Maps/Lobby
”
26.4 对创建会话进行测试
-
如果是从课程的 Github 示例项目 下载的多人游戏插件 “
MultiplayerSessions
”,需要在 “MultiplayerSessionsSubsystem.cpp
” 的 “CreateSession()
” 函数中添加代码行LastSessionSettings->bUseLobbiesIfAvailable = true;
使用虚幻引擎 5.0 版本可能需要删除 “DefaultGame.ini
” 中的两行代码。2. 将 “GameStartupMap
” 和 “Lobby
” 两张地图添加到 “项目设置” 的 “打包版本中要包括的地图列表” 选项中。
-
打包项目。首先在项目目录下新建一个文件夹 “
Build
”,此后都将用于保存我们打包的项目;接着在虚幻引擎窗口点击工具栏的 “平台” 按钮,在下拉菜单栏中选择 “Windows”,然后选择 “打包项目”。
如果打包项目时,出现下图中 “SDK未设置” 的错误提示 “Windows的SDK未正常安装,而其是生成数据的必需项。请检查主工具栏中“启动”菜单的SDK部分来更新SDK”,解决办法参见《UE5打包SDK未正确安装的问题》。
-
下载并安装 Steam 平台客户端(官方下载地址:https://store.steampowered.com/),然后注册账户进行登录。此过程可能需要科学上网,也可以下载 Watt Tookit(官方下载地址:https://steampp.net/) 加速。
-
在 “
/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未正确安装的问题》。