UE 客户端 需要的网络同步概念总结

一.服务器中的GamePlay

服务器端是权威UE ,计算关键的东西。

客户端是表现,可以渲染关键信息的附带逻辑和效果。

其实是一套代码跑出来的,只是同步的信息点不同。服务器应该是有个完整的主机游戏。

UE 的 Server 是 Authoritative(权威方),决定血量、位置合法性。Client 负责插值、特效、输入预测反馈。并且确实是一套 Project 编译出来的,通过 HasAuthority() 和 GetNetMode() 走不同分支。

  • 在 UE 的 Listen Server 模式下,服务器确实跑着完整渲染(是一个完整的游戏客户端同时兼任服务器)。

  • 在 UE 的 Dedicated Server(专用服务器)模式下 ,服务器没有显卡渲染,只有逻辑,不叫"完整主机游戏",更准确叫 "完整的 World State 副本"。

记住这个图,GameMode 是服务端独有,客户端没有的。

GameState都有一个且双端共有。PlayerState,Pawn 是都有所有的且共享的。

{Pawn 是都有所有的且共享的" ------ 准确说,每个客户端只知道自己控制的 Pawn 和已被复制到自己的其他 Pawn。服务器上所有 Pawn 都会复制给相关客户端,但服务器不主动把无关 Pawn 同步给不相关的客户端(相关性裁剪)}

服务器有所有的PlayerController,但是客户端只有自己的PlayerController

UMG,AHUD是客户端才有的。

二.服务器,客户端生成区别

生成方式 服务器 客户端
SpawnActor 直接生成,拥有 Authority 若生成 Replicated Actor,需通过 RPC 请求服务器生成(或由服务器主动生成后同步下来)
组件激活 组件 Tick 正常 部分组件(如 Movement Component)只在本地模拟,服务器不发 Tick
BeginPlay 先于客户端执行(网络复制初始化前) 在收到 Actor 复制并创建后执行,通常晚于服务器

三.状态同步

RPC,属性同步

1.属性同步时轮询的,属性同步本身有可靠性保证 :Reliable 的复制属性是保证送达的。如果在它轮询的时间返回到原来的结果,就相当于没有变。

只有当值发生改变且网络更新到来时才发送。

一般是服务器端向客户端,单向的。

2.RPC

1.分为 可靠(Reliable) 和 非可靠(Unreliable)。总记错为可信任和不可信任的

可信任的是一直发,发到你收到为止。带宽有限,节省着用。

不可信任的是发了,收不收得到,随缘不太受影像。适合不太重要的瞬态事件。

2.RPC方向

客户端向服务器端发送,这个我觉得是它比较大的存在意义。

服务器也可以向客户端调用。

RPC 方向:Client -> Server (需在客户端拥有或已在服务器上的 Actor 调用) 和 Server -> Client(需指定目标客户端)

四.预测 乐观预测

客户端本地预测移动/技能,不等服务器确认就表现结果(乐观预测)。

服务器收到输入后进行权威校正,若不一致则回滚或平滑修正(如 CharacterMovementComponent 的 ClientAdjustPosition)。

相关推荐
贞明电子5 小时前
工业三色报警灯怎么接入项目系统?开关量与RS485控制应用指南
运维·网络·微信公众平台·贞明电子
HideF5 小时前
Linux
linux·服务器·网络
C^h5 小时前
c++ string
开发语言·c++
万联WANFLOW5 小时前
海外网络故障怎么排查?Cloudflare 三季度断网报告解读与 mtr 实战
运维·网络·故障分析
sbjdhjd5 小时前
网工进阶笔记:H3CSE 园区网全栈技术与协议汇总
网络·笔记·云计算·ssh·网络工程·vlan·aaa
raindayinrain6 小时前
c++高性能--原子操作,无锁编程,操作顺序
开发语言·c++·性能优化
学逆向的6 小时前
C++ 合并命名空间
开发语言·c++·网络安全
Zhao-Jichao6 小时前
VS2026 打包 C++ 程序生成 EXE,借助 Installer Project 扩展工具
开发语言·c++
小徐不徐说7 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
大都督会赢的7 小时前
C++第一节课
开发语言·c++