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

一.服务器中的GamePlay

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

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

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

UE 的 ServerAuthoritative(权威方),决定血量、位置合法性。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)。

相关推荐
猫头虎2 小时前
楚存科技CSD32GAZIGY SD NAND贴片式TF卡深度评测:小身材大容量,嵌入式存储新选择
linux·服务器·网络·人工智能·windows·科技·芯片
PinTrust SSL证书2 小时前
Sectigo(Comodo)域名型DV通配符SSL
网络·网络协议·http·网络安全·https·软件工程·ssl
源远流长jerry2 小时前
从 Nginx 到 DPVS:高性能负载均衡之路
linux·网络·tcp/ip·nginx·负载均衡
云深麋鹿2 小时前
C++ | 继承
开发语言·c++
小辉同志2 小时前
Epoll+线程池
开发语言·c++·c·线程池·epoll
史迪仔01122 小时前
[QML] Qt Quick Dialogs 模块使用指南
开发语言·前端·c++·qt
谭欣辰2 小时前
Floyd算法:动态规划解最短路径
c++·算法·图论
6Hzlia2 小时前
【Hot 100 刷题计划】 LeetCode 84. 柱状图中最大的矩形 | C++ 两次单调栈基础扫法
c++·算法·leetcode
小苗卷不动2 小时前
OJ刷题之栈和排序(中等)
c++