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

相关推荐
OPEN-F26 分钟前
C++进阶教程:继承与多态
开发语言·c++
普马萨特2 小时前
实体与位置关系的数据从哪里来:获取、治理与仍待解决的问题
网络·数据库
sunshine8852 小时前
智能费控3.0:从合规审核到预算实时控制的进化之路
网络
luj_17682 小时前
大律师考核应重能力与科技素养
c语言·开发语言·c++·经验分享·算法
刃神太酷啦3 小时前
Linux 系统 MySQL 完整安装配置教程:从卸载 MariaDB 到优化 my.cnf----《Hello MySQL!》(1)
android·linux·c语言·c++·mysql·leetcode·mariadb
范什么特西3 小时前
回答网络-01
网络
Zenova EdgeOS5 小时前
工业网关心跳机制:从 Keepalive 到健康判定的工程实战
大数据·网络·数据库·边缘计算·工业网关
郝学胜-神的一滴5 小时前
Effective Python 条款4:字符串格式化大乱斗
开发语言·网络·python·程序人生·软件工程
汉克老师6 小时前
CSP-J 初赛(以满分为目标):第十五课《结构体、排序与自定义比较——从“给数字排队”到“给一群人排队”》
c++·csp-j·小学生·学c++编程
云絮.6 小时前
网络编程套接字
网络