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)。

相关推荐
C++ 老炮儿的技术栈几秒前
C++ const 的3个核心作用
服务器·c语言·c++·算法·c
小黄人软件2 分钟前
粘贴助手C++版 支持 Windows 7 / 10 / 11 不会出现缺少api-ms-win-core-path-11-1-0.dll
开发语言·c++·windows
有毒的教程13 分钟前
Dev-C++ 避免爆栈(Stack Overflow)完整方案
c++·算法·深度优先
程序员老陆14 分钟前
从汇编层面理解 C++ 多线程
开发语言·c++·程序设计
迈威通信27 分钟前
迈威 MISCOM8212GP-4XGF-8GTPoE90-DC48 接入层实践:高密度 PoE++ 与万兆上行的整合方案
运维·网络·信息与通信
IOT-Power30 分钟前
模板方法 + 策略模式
开发语言·c++
威联通网络存储1 小时前
TS-h1283XU-RP 在医药批记录与检验场景的部署
网络·python
fpcc9 小时前
c++编程实践—堆和栈越界调试
c++
木子n110 小时前
车载以太网与SOME/IP服务化通信实战-01.从字节到服务:SOME/IP报文解析与四通道开销账
网络·网络协议·tcp/ip·车载以太网·some/ip
weiabc11 小时前
MSYS2 UCRT64 + g++ C++ 中文输出乱码 完整全过程
c++