本文内容
第33章 编辑器中的多人游戏
第33章 编辑器中的多人游戏
介绍
注意:本章的随附资源可以在 GitHub 上找到,网址为: https://github.com/AMZN-Olex/O3DEBookCode2111/tree/ch33_multiplayer_in_editor
有两种方法可以迭代多人游戏工作,一种是直接启动游戏启动器,另一种是使用 Editor。带有 “+host +loadlevel MyLevel” 参数的 MyProject.ServerLauncher 启动服务器。
带有 “+connect” 参数的 MyProject.GameLauncher 启动并将客户端连接到本地服务器。
使用 Editor 要简单得多,也更快捷。本章将介绍在 O3DE 中以最有效、最快速的方式使用 Editor 迭代多人游戏的方法。
编辑器服务器
默认情况下,当您在 Editor 中按 CTRL+G 时,多人游戏支持处于禁用状态。要启用多人游戏模式,您必须将 CVar 变量 editorsv_enabled 设置为 true。默认情况下,它设置为 false,因此为了避免每次启动 Editor 时都必须在 Editor 控制台中启用它,我们可以创建一个控制台命令文件,该文件在启动时由 Editor 自动加载:C:\git\book\MyProject\editor.cfg。
例 33.1.使用 editor.cfg 打开 CLTR+G 多人游戏
editorsv_enabled=true
editorsv_hidden=true
editorsv_rhi_override=null
editorsv_enabled启用编辑器服务器,editorsv_hidden启动服务器时后台没有窗口,editorsv_rhi_override为“null”将禁用渲染子系统。(RHI 代表渲染硬件接口。这些是您迭代多人游戏的最快设置。
提示:如果您在使用 Editor 时需要查看服务器窗口,请根据您的平台将 editorsv_rhi_override 设置为 “dx12” 或 “vulkan”,或者将其留空并由 Atom 渲染器选择。
过程 33.1.如何在 Editor 中运行多人游戏。
- 如上所述创建 editor.cfg。
- 启动 Editor。
- 使用 CTRL+G 进入游戏模式。
- 等待几秒钟,让 MyProject.ServerLauncher 在后台隐藏启动。
- 几秒钟后,Editor 将作为客户端连接到后台的服务器。
关卡中的多人游戏组件
现在,我们已经知道如何在 Editor 中测试多人游戏,其中 Editor 充当客户端,我们需要了解两个要点。
注意:所有多人游戏组件都需要 Net Binding 组件。
注意:多人游戏组件不得直接放置在关卡中。它们必须用预制件包装,然后才能将预制件放入关卡中。
例如,我们可以使用 Transform、Network Binding、My First Network Component、Network Transform Component 和 Mesh 组件创建我们的第一个多人游戏实体。
然后在 Entity Outliner 中,从此实体创建预制件。
注意:如果没有 Network Transform Component (网络转换组件),实体将不会显示在客户端上。
图 33.1.包装在预制件中的网络实体
这会在我们的关卡中间临时添加一个白框 (Multiplayer_Test.prefab),当我进入多人游戏游戏模式时,白框立即消失。发生这种情况是因为关卡预制件分为两个部分:常规部分和网络部分。Regular 部分可以立即生成,但网络部分必须等待 Editor 作为客户端连接到服务器。然后,服务器将告诉客户端该级别上的所有网络实体。
同时,您可以通过查看 Editor 控制台来确认此实体确实在服务器中生成,该控制台会打印我们在上一章中添加的调试行。
例 33.2.编辑器服务器日志
(EditorServer) - MyGem::MyFirstNetworkComponent::OnActivate:
we are on entity Multiplayer Test
MyGem::MyFirstNetworkComponentController::OnActivate:
we are on entity Multiplayer Test
小结
注意:本章的随附资源可以在 GitHub 上找到,网址为: https://github.com/AMZN-Olex/O3DEBookCode2111/tree/ch33_multiplayer_in_editor
在本章中,我们学习了如何在 Editor 中玩多人游戏,以及如何使用预制件在关卡中放置多人游戏实体。但是,目前,在进入游戏模式时,不会显示任何多人游戏实体,因为我们的客户端设置缺少一个关键部分,否则无法在服务器和编辑器之间建立网络连接。
我们缺少一个 player 对象。一旦我们告诉多人游戏系统哪个实体是我们的玩家实体,连接就会正确建立,开发就可以开始了。下一章将讨论创建我能想到的最简单的玩家刷怪箱。