ue4联网和多人游戏第二部分
1.3.1 网络模式和服务器类型
网络模式
描述了计算机与网络多人游戏会话的关系。游戏实例可采用以下任意网络模式:
拥有游戏副本的用户均可启动聆听服务器并在同一计算机上运行,因此聆听服务器对于用户而言较易自发设置。支持聆听服务器的游戏通常拥有游戏UI,用于启动服务器或搜索要加入的服务器。但由于主持聆听服务器的玩家会直接在服务器上游戏,因此比其他必须使用网络连接方可游戏的玩家更具优势,于是便导致了公平和作弊问题。同时,要作为服务器运行,还需支持如图形和音效等玩家相关系统,从而引发额外处理负载。此类因素导致聆听服务器不适用于激烈的竞技或网络负载极高的游戏,但对于小型玩家群体间进行临时合作和竞技多人游戏而言,却十分好用。
专属服务器成本更高,更难以配置,需要独立于所有参与玩家的计算机,并需要完成自身网络连接。但所有加入专属服务器的玩家均使用相同类型的连接进行游戏,从而保证了公平性。
由于专属服务器不会渲染图形或执行仅与本地玩家相关的其它逻辑,因此还可高效处理gameplay和网络。
因此,出于安全、公平或可靠方面的原因,专属服务器更适用于需要大量玩家或需要高效执行、可信服务器的游戏。此类游戏包括MMO、竞技MOBA,或快节奏网络射击游戏。
因为独立游戏服务器可同时作为服务器和客户端,为多人游戏创建的逻辑可在无需额外工作的情况下,在单人游戏中运行。
1.3.2 Actor复制
复制是指在网络会话中的不同机器间复制游戏状态信息。若正确设置复制,将可同步不同机器的游戏实例。多数Actor默认不会启用复制,且将本地执行所有功能。在C Actor类中设置 b Replicates 变量,
或将Actor蓝图的 复制(Replicates) 设置设为 true,可启用给定类的Actor复制。
以下为创建网络游戏时的常见复制功能:
虽然创建、销毁和移动等常见使用可自动处理,但即使启用复制,其他所有gameplay功能也不会默认自动复制。必须根据游戏的需求明确指定要复制的变量和函数。欲了解上述所有复制功能的详情,参见Actor复制 指南。
Actor、Pawn和角色的部分常用功能不会复制:
此类项目均在所有客户端上单独运行。但是,若复制驱动此类视觉元素的变量,则可确保所有客户端都具有相同信息,从而以大致相同的方式进行模拟。
1.4 网络角色和授权
Actor的 网络角色 将决定网络游戏期间控制Actor的机器。授权 Actor被认为可控制Actor的状态,并可将信息复制到网络多人游戏会话中的其他机器上。
远程代理 是该Actor在远程机器上的副本,其将接收授权Actor中的复制信息。其由 Local Role 和 Remote Role 变量进行追踪,可取以下值:
虚幻引擎使用的默认模型是 服务器授权,意味着**服务器对游戏状态固定具有权限,而信息固定从服务器复制到客户端。**服务器上的Actor应具有授权的本地角色,而其在远程客户端上的对应Actor应具有模拟或自主代理的本地角色。
欲了解Actor网络角色,参见Actor角色和远程角色 指南。
1.5 客户端拥有权
特定客户端机器上的 Player Controller 拥有网络游戏中的pawn。Pawn调用纯客户端函数时,其将无视调用函数的机器,而仅指向拥有玩家的机器。若将Actor的 Owner 变量设为特定Pawn,则通关关联,该Actor属于该Pawn的拥有客户端,并将纯客户端函数指向其拥有者的机器。可使用C 中的 Is Locally Controlled 函数,或蓝图中的 Is Locally Controlled 节点,以决定Pawn是否在其拥有客户端上。
由于构造期间Pawn可能未指定控制器,因此避免在自定义Pawn类的构造函数中使用 Is Locally Controlled。
有关拥有权的详情,参见Actor及其拥有连接 上的指南。
1.5.1 相关性和优先级
相关性 用于决定是否需要在多人游戏期间复制Actor。复制期间将剔除被认为不相关的actor。此操作可节约带宽,以便相关Actor可更加高效地复制。若Actor未被玩家拥有,且不在玩家附近,将其被视为不相关,而不会进行复制。
不相关Actor会存在于服务器上,且会影响授权游戏状态,但在玩家靠近前不会向客户端发送信息。覆盖 Is Net Relevant For 函数以手动控制相关性,
并可使用 Net Cull Distance Squared 属性决定成为相关Actor所需距离。
有时在游戏单帧内,没有足够带宽供复制所有相关Actor。因此,Actor拥有 优先级(Priority) 值,用于决定优先复制的Actor。
Pawn和Player Controller的 Net Priority 默认为 3.0,从而使其成为游戏中最高优先级的Actor,而基础Actor的 Net Priority 为 1.0。Actor在被复制前经历的时间越久,每次成功通过时所处的优先级便越高。
欲了解Actor相关性和优先级的详情,参见网络优先级 上的指南。
1.6 变量复制
在C 中使用对应 UPROPERTY 宏内的 Replicated 或 Replicate Using 说明符,或在蓝图的细节面板中将它们指定为已复制,可将复制添加到变量和对象引用。授权Actor上复制变量的值变更时,其信息将自动从授权Actor发送到连接会话的远程代理。
1.6.1 Rep Notify
可指定在Actor成功接收特定变量的复制信息时要调用的 Rep Notify 函数。Rep Notify仅在变量更新时本地触发。触发gameplay逻辑响应授权Actor上的变量更改时,使用Rep Notify可减少开销。在C 中使用变量的 UPROPERTY 宏的 Replicated Using 说明符可访问此功能,或修改蓝图中变量的复制设置以使用Rep Notify。
由于Rep Notify可添加到需复制的变量中,而无需考虑其他gameplay功能,创建额外网络调用时刻节约大量带宽,因此Rep Notify比RPC或复制函数更加好用。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfcfia
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01