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

相关推荐
卷无止境14 分钟前
Eigen 库如何借助 OpenMP 加速计算
c++·后端
卷无止境1 小时前
OpenMPI、MPICH 与 OpenMP:关系、核心概念与架构全解
c++·后端
郝学胜_神的一滴1 天前
CMake 30:循环语法全解|foreach_while双循环精讲、迭代技巧与实战避坑指南
c++·cmake
卷无止境3 天前
C++ 的Eigen 库全解析
c++
卷无止境3 天前
现代 C++特性大盘点:一门脱胎换骨的老语言
c++·后端
郝学胜_神的一滴3 天前
CMake 27:缓存变量的特性、语法、类型与实操全解
c++·cmake
博客18005 天前
酷宝的使用方法,超好用的免费界面库,C++、MFC可用
c++·mfc·界面库·库来帮·酷宝
郝学胜_神的一滴5 天前
CMake 026:属性体系精讲、四大作用域全解 & 实战代码落地
c++·cmake
众少成多积小致巨6 天前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
clint45610 天前
C++进阶(1)——前景提要
c++