ue4 网络的最佳实践
Posted zhangxiaofan666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ue4 网络的最佳实践相关的知识,希望对你有一定的参考价值。
关于性能的一般最佳实践
通常,通过网络发送的数据越少,性能越好。为了保持较低的网络开销,请考虑以下做法
-
最大程度地减少Actor和属性的复制次数
-
如果Actor不用经常更改,请降低它的NetUpdateFrequency
-
尽可能降低Net剔除距离,以便减少远距离Actor的更新次数
-
如果Actor的一部分属性需要频繁复制,而其他属性很少更新,可考虑将该Actor分为多个Actor,把频繁更新的属性绑定在一个Actor上,把不需要频繁更新的属性绑在另一个Actor
-
当你在编写代码功能时,只有在绝对必要时才考虑使用可靠RPC调用
-
考虑使用第三方服务,例如Oodle,它能将带宽提升20-30%,但需要购买许可证
-
避免在复制的Actor上使用子Actor组件,因为它们往往存在同步问题
-
要注意权威性
-
在更改复制属性时,请确保只在拥有对象权威的那一侧的改动,以便确保工作不会被覆盖或浪费。
-
仅在拥有权威的那一侧生成对象
-
-
复制图表对于大量的复制Actor来说很有帮助,但对于少量复制则帮助很小
延迟补偿
采用“攻方有利”有利原则时,以下技巧可以帮助减少延迟的影响:
-
通常,可以在客户端处理碰撞测试,以便节省服务器计算量
-
服务器应对结果进行一些简单的验证(检查范围和角色位置等)
-
建议使用第三方反作弊解决方案,有助于最大程度减少客户端漏洞
-
客户端可以生成一个预测用发射物,直至从服务器复制的发射物到达为止
更新频率
默认情况下,Actor会根据它们的复制频率被频繁复制。对于不需要经常更新的Actor,有几种方法可以控制复制速率,每种方法都各有利弊。应根据具体情况使用网络分析器找到最佳解决方案。
将NetUpdateFrequency设置为0:最适用于更新不频繁,但高到仍需保持更新渠道畅通的Actor。
-
不发送自动更新,仅通过“强制网络更新”(Force Net Update)手动更新,这样可以节省网络流量
-
更新渠道仍然开放,因此之后的手动更新不会产生额外开销
-
Actor保留在复制Actor池中,因此必须经常检查复制情况
将Actor标记为休眠:最适用于以后可能会再次更新但更新频率非常低的Actor。
-
休眠系统将关闭Actor的更新渠道,将其从复制池中删除,并保留在单独的休眠池中
-
可以在将Actor标记为休眠之后再发送更新消息,但这会产生额外开销,因此应尽量少用
-
单个更新可以通过“清空网络休眠”(Flush Net Dormancy)发送
对Actor调用TearOff():最适合在Actor不再需要复制时使用
-
将Actor从复制池中完全删除
-
无法再次轻松复制,不应该在Actor可能再次更新时使用
-
通常用于客户端模拟布娃娃效果
RepNotify对比Multicast
RepNotify具有一些优点,使它在大多数情况下都是最优选。
-
RepNotify支持进程中加入
-
组播(Multicast)中的RPC调用不会发送给新连接,这意味着它们不支持进程中加入(join-in-progress)
-
RepNotify通过使用增量状态压缩发送少量数据
网络测试技巧
-
在专用服务器模式下使用在编辑器中播放进行测试,以便更好地呈现生产环境
-
利用新的内置网络模拟设置,确保你不是专门针对完美的网络条件进行测试
以上是关于ue4 网络的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章