UE4联网机制和多人游戏总结 (第一部分)
1 网络概述
在多人游戏会话中,游戏状态信息将通过互联网连接在多台机器之间通信,而非单独驻留于一台计算机上。玩家之间的信息共享十分微妙,并会增加部分额外步骤,因此此操作导致多人游戏编程比单人游戏编辑复杂。虚幻引擎 提供的网络框架非常强大,支持部分世界上最流行的网络游戏,可简化此流程。本页对驱动多人游戏编程的概念和可使用的网络游戏构建工具进行了概述。
1.1 尽早规划多人游戏
若项目可能需要多人游戏功能,则从项目开始阶段起,构建所有gameplay时都应将多人游戏功能考虑在内。若开发团队通常会在创建多人游戏时实施额外步骤,相较于单人游戏,构建gameplay的流程并不会耗时过久。长远来看,项目将便于整个团队进行调试和维护。同时,虚幻引擎中编写的多人游戏gameplay仍可在单人游戏中使用。
但是,重构无网络情况下编译的基本代码需要梳理整个项目,几乎所有gameplay都需要重新编写。届时,开发团队成员需重新学习可能早已熟悉的编程实操。同时,网速和稳定的相关技术瓶颈也会让你措手不及。
相较于初期规划,在项目后期引入网络功能会占用大量资源,且极为复杂。因此,除非确定项目无需多人游戏功能,否则应 始终 按多人游戏方向进行编程。
1.2 客户端-服务器模型
在单人游戏或本地多人游戏中,游戏在 独立 游戏上本地运行。玩家将输入连接到一台计算机,直接控制其上所有内容,而包括Actor、场景和各玩家的用户界面在内的所有游戏项目均存在于这台本地机器上。
单人游戏和本地多人游戏都仅在一台机器上执行。
在网络多人游戏中,虚幻引擎使用 客户端-服务器 模型。网络中的一台计算机作为 服务器 主持多人游戏会话,而所有其他玩家的计算机作为 客户端 连接到该服务器。然后,服务器与连接的客户端分享游戏状态信息,并提供一种客户端之间通信的方法。
在网络多人游戏中,游戏将在服务器(1)与多个与之连接的客户端(2)之间进行。服务器处理gameplay,客户端向用户显示游戏。
**服务器作为游戏主机,保留一个真实 授权 的游戏状态。**换句话说,服务器是多人游戏实际发生的地方。客户端会远程控制其在服务器上各自拥有的 Pawn,发送过程调用以使其执行游戏操作。但服务器不会将视觉效果直接流送至客户端显示器。服务器会将游戏状态信息 复制 到各客户端,告知应存在的Actor、此类Actor的行为,以及不同变量应拥有的值。然后各客户端使用此信息,对服务器上正在发生的情况进行高度模拟。
欲了解客户端与服务器之间的连接过程的相关额外技术信息,参见客户端-服务器模型 上的指南。
1.2.1 客户端-服务器游戏范例
我们将在多人游戏中以两个玩家为例,说明此过程对gameplay编程实践的改变方式。我们称他们为 玩家1 和 玩家2,并分析两人互射发射物的过程。
在网络多人游戏中,游戏将在服务器(1)与多个与之连接的客户端(2)之间进行。服务器处理gameplay,客户端向用户显示游戏。
在独立游戏中,此类所有交互都在同一台机器上的同一 场景 中发生,因此理解和编程均较为简单。例如,生成对象时,你可以认为所有玩家均能看到此对象。
在网络游戏中,此类交互发生在多个不同场景:服务器上的场景、玩家1客户端的场景、玩家2客户端的场景,以及参与会话的其他所有客户端的额外场景。每台不同机器上的各场景均有各自Pawn、武器及发射物的副本。服务器是游戏真正运行的地方,但我们要让客户端的场景看似发生了相同事件。因此,需要选择性地向各客户端发送信息,以在服务器上创建场景的视觉代表。
这一过程将在基础游戏交互(碰撞、移动、伤害)、美化效果(视觉效果和音效)和私人玩家信息(HUD更新)间进行划分。这三者各自与网络中的特定机器或机组关联。但是,**此信息的复制过程并非完全自动,游戏编程时须指定要复制的信息和接收副本的机器。主要的难点在于选择应复制的信息及方式,以向所有玩家提供一致的游戏体验,同时需最小化信息复制量,尽可能减少网络带宽占用率。**加粗样式
UE4联网机制和多人游戏总结 (第一部分)相关推荐
- UE4反射机制的通俗理解【代码生成】
UE4反射机制主要分为以下几个阶段 生成阶段:借助UHT生成对应包含了反射声明的反射代码 收集阶段:借助static自动注册方式,在模块加载的时候,把UCLASS注册,放在array中管理 注册阶段: ...
- UE4之简单的多人游戏
UE4多人游戏主要用到CreateSession,FindSession和JoinSession,功能分别是创建会话,查找会话以及加入会话.以下第三人称模板为例实现一个两人游戏. 1.创 ...
- 多人手柄联网游戏_多人联网游戏:迈出的第一步
多人手柄联网游戏 As part of our commitment to solving challenges for connected games development, we've focu ...
- Casper 机制的历史起源:第一篇
这篇文章是在史蒂夫D麦凯的要求下,从以太坊博客中找出的再版 上周,Vitalik和我说,我应该在博客里面分享一些我的基础研究和设计哲学,其实这点我是赞成的,我虽然赞成了,但是由于我的基础研究和设计哲学 ...
- 区块链:Casper 机制的历史起源:第一篇
这篇文章是在史蒂夫D麦凯的要求下,从以太坊博客中找出的再版 上周,Vitalik和我说,我应该在博客里面分享一些我的基础研究和设计哲学,其实这点我是赞成的,我虽然赞成了,但是由于我的基础研究和设计哲学 ...
- UE4联网Steam
LAN联网很简单相信大家都会了,现在跟大家分享下Steam联网的设置 参考:https://wiki.unrealengine.com/Steam,_Using_the_Steam_SDK_Durin ...
- UE4反射机制的通俗理解【生成第一个UClass】
上一篇我们讲到了利用static变量把构造函数指针以及生成的类信息都收集到了全局静态数组中.这一篇就要讲讲,收集好了之后,我们是怎么利用这些收集的信息来生成我们的UClass的. 上一篇最后说到了,I ...
- 如何降低ue4 cpu消耗_UE4实时渲染第一节:渲染之前(遮挡处理)
本节主要讲一下虚幻渲染之前,都发生了生么. 渲染流程: 首先,虚幻的渲染由三个线程共同完成.分别是CPU线程,DRAW线程,和GPU线程. CPU线程:顾名思义,运行在CPU上,用于计算游戏中的所有逻 ...
- android handler的机制和原理_第一百八十回:Android中的Handler机制九
各位看官们大家好,上一回中咱们说的是Android中Handler机制的例子,这一回咱们继续说该例子.闲话休提,言归正转.让我们一起Talk Android吧! 看官们,由于时间的原因我们在上一回中只 ...
- Online Subsystem Steam 在线子系统Steam (虚幻引擎UE4 联网)
在本页: 满足阀门的要求 正在下载Steamworks 设置Steamworks SDK Steam App ID 配置您的应用程序的设置 补充笔记 该在线子系统蒸汽API使您能够出货虚幻引擎4(UE ...
最新文章
- 【Sql Server】DateBase-事务
- s-sgdisk源码分析 “--set-alignment=value分区对齐参数”
- 2011-02 Emacs相关闪存
- 高可用高性能分布式文件系统FastDFS实践Java程序
- 树状数组相关应用之区间更新单点查询问题
- 20200316:H指数(leetcode274)
- Android Spinner –下拉列表
- 中科院合肥物质科学研究院葛运建团队: 智能机器人带来更美好生
- 关于xp英文版安装多国语言包的问题
- gtp6 linux 启动_glibc.i686安装
- java中控指纹仪_java 中控URU4500指纹仪开发
- php laravel mix,Laravel框架 之 Mix
- Android 6.0 运行时权限管理最佳实践
- Python采集视频数据,下载流媒体m3u8格式
- DS博客作业06——图
- 实锤了,尤大妥妥的二次元迷弟 —— 聊聊 Vue 的进化历程
- PCM开发板模块实验指导--SPI读写PSRAM64实验
- IDEA插件系列(89):Copy/Paste Stack插件——复制/粘贴工具栈
- Android急速模拟器Genymotion安装指北
- Travel 最短路