《UE5_C++多人TPS完整教程》学习笔记55 ——《P56 网络更新频率(Net Update Frequency)》


本文为B站系列教学视频 《UE5_C++多人TPS完整教程》 ------ 《P56 网络更新频率(Net Update Frequency)》 的学习笔记,该系列教学视频为计算机工程师、程序员、游戏开发者、作家(Engineer, Programmer, Game Developer, Author)Stephen Ulibarri 发布在 Udemy 上的课程 《Unreal Engine 5 C++ Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者)为 游戏引擎能吃么。


文章目录

  • [P56 网络更新频率(Net Update Frequency)](#P56 网络更新频率(Net Update Frequency))
  • [56.1 了解并设置网络更新频率](#56.1 了解并设置网络更新频率)
  • [56.2 Summary](#56.2 Summary)

P56 网络更新频率(Net Update Frequency)

本节课我们将了解网络更新频率,并尝试更改相关设置来改变角色从服务器接受更新消息的频率以及服务器的 Tickrate,它将决定我们的服务器能以多大的速度向客户端发送更新消息。


56.1 了解并设置网络更新频率

  1. 打开虚幻引擎进行多人游戏测试,当我们操控其中一个客户端上的人物角色慢慢进行转向时,可以观察到服务器和另一个客户端上的人物角色的腿会有些抖动(Twitch),那是因为在模拟代理端动画蓝图的 Tickrate 和网络传输更新有关,它可能会比被控端的实际 Tickrate 要低。

  2. 在动画蓝图 "BlasterAnimBP" 的 "AnimGraph" 事件面板中选择 "旋转根骨骼" 节点,接着在右侧细节面板中勾选 "插值结果 "(Interp Result),这样做之后可以发现人物角色的腿没有抖动了。但是在非被控端上,我们控制的人物角色根骨骼旋转会比在被控端上的慢一些。

  3. 打开人物角色蓝图 "BP_BlasterCharacter",在右侧细节面板找到 "复制 "(Replicaiton)选项卡,在选项卡下可以看到 "网络更新频率 "(Net Update Frequency)和 "最小网络更新频率 "(Min Net Update Frequency)两个参数。"网络更新频率 " 是考虑将 Actor 进行复制的频率(每秒),用于决定 "NetUpdateTime";"最小网络更新频率 " 是用于决定在复制属性很少发生变化时的节流率,它可以决定为了优化带宽性能(Bandwidth performance)引擎更新频率的下限。我们可以尝试设置 "网络更新频率" 为 4.0,模拟当网络传输状态较差时引擎的更新速率进行测试,可以发现人物角色的动画更新都有些掉帧。

  4. 在 "BlasterCharacter.cpp" 的构造函数 "ABlasterCharacter()" 中设置网络更新频率的默认值为 66.0,设置最小网络更新频率默认值为 33.0。

    cpp 复制代码
    /*** BlasterCharacter.cpp ***/
    
    ...
    
    // Sets default values
    ABlasterCharacter::ABlasterCharacter()
    {
     	// Set this character to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
    	PrimaryActorTick.bCanEverTick = true;
    
    	...
    
    	TurningInPlace = ETurningInPlace::ETIP_NotTurning;									// 默认转身状态为不转身
    	
        /* P56 网络更新频率(Net Update Frequency)*/
    	NetUpdateFrequency = 66.f;															// 设置网络更新频率
    	MinNetUpdateFrequency = 33.f;														// 设置最小网络更新频率
    	/* P56 网络更新频率(Net Update Frequency)*/	
    }
    
    ...
  5. 在配置文件 "Blaster/Config/DefaultEngine.ini" 中添加代码,设置网络服务器最大 Tickrate "NetServerMaxTickrate" 为 60,它是服务器发送给客户端的更新的最大值。

    复制代码
    ...
    
    [/Script/UnrealEd.CookerSettings]
    cook.AllowCookedDataInEditorBuilds=True
    DefaultASTCQualityBySpeed=3
    DefaultASTCQualityBySize=4
    
    ...
    
    [/Script/OnlineSubsystemUtils.IpNetDriver]
    NetServerMaxTickRate = 60
  6. 将项目打包并进行多机测试,确保人物角色瞄准偏移、转身等动画都能进行网络同步。(笔者比较懒,这里就不进行测试了)


56.2 Summary

本节课我们了解网络更新频率和服务器 TickRate 的基本概念;接着,我们在 C++ 代码中设置了网络更新频率和最小网路更新频率的默认值,并在项目配置文件中设置服务器的最大 Tickrate,为了保证我们的网络配置有效,这里建议将项目打包并在多机上进行测试,观察人物角色的动画在多人游戏环境下是否都能同步且正确地播放。


相关推荐
ShineWinsu10 分钟前
对于Qt:QLCDNumber常见属性以及QTimer的解析
服务器·数据库·c++·qt·gui·qtimer·qlcdnumber
xiaoye-duck18 分钟前
《C++ 工具库实战》C++ 解析利器 JsonCpp:从基础使用到封装简易 JSON 工具
c++·json·第三方库
dialect_9 小时前
KMP算法
开发语言·c++·算法
ShineWinsu10 小时前
对于Qt:QRadioButton常见属性以及QButtonGroup的解析
数据库·c++·qt·microsoft·gui·qradiobutton·qbuttongroup
傲世仙尊11 小时前
多态-虚表才活到运行期符号表早已消失
c++
chenbingjie_c11 小时前
C++ 多态完全指南:从虚函数重写到虚函数表原理
开发语言·c++
是main不是漫11 小时前
【双指针——移动零】数组划分类题目的入门基石
c++·算法
·present·11 小时前
CSAPP(Bomb lab)
c语言·c++
王老师青少年编程11 小时前
2026年信奥赛c++普及组csp-j第二轮复赛真题
c++·真题·csp·信奥赛
时间的拾荒人12 小时前
CMake 常用命令详解:从版本声明到安装部署
c++·面试