• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
YOASOBIComp
博客园    首页    新随笔    联系   管理    订阅  订阅
UE4 联网RPC部分

有些人生来就是为了奔跑,而有些人,则拥有更高的目标>

笔者近期在进行UE C++网络的一些开发,发现RPC这个部分它看起来很简单,理解起来也算不上难。但真正应用起来,对netcode经验不多的人也许就会遇到各种各样的问题。尤其是RPC,今天笔者来解释一下三种RPC的区别,第一篇博客,如有错误请指正,谢谢。

三种RPC的不同之处

Client

首先我们需要知道如何使用Client RPC,在ue4里是这样实现的,请看代码。
UFUNCTION(Client) void DoSomething();

值得注意的是,UFUNCTION宏中联网相关的标记可不止Server,Client,Multicast这几个,实际上还有Reliable,WithValidation等。
Reliable指的是,此函数是可靠的,百分之百会执行。我们知道,网络游戏的可变因素非常多,你不能确定每个数据包都完好无损的传输成功。
哪里需要用到Reliable呢?和游戏逻辑紧密关联的,如:重生,装备武器。
哪里不需要呢?生成特效等执不执行都无关紧要的内容不需要。Reliable标记必须用在合适的地方,否则对带宽是一个很大的挑战。
Validation则是一个bool,我们可以用它来防止数值欺骗,如果当前的伤害大于最高值,玩家就会断开连接。

Client RPC的大致原理:
如果当前执行Client RPC的是服务器(HasAuthority),那么是在服务器自身执行。如果当前不是Authority,实际上是在Client上执行,发送给Server一个请求,如果Server接受了,在Server上的副本才真正执行。在虚幻引擎中这个过程实际上是很复杂的,涉及到Client Prediction等等很多技术。而Client RPC,实际上不需要等待服务器的请求,换句话说就是障眼法,你看着本地是执行了,实际上并没有同步到服务器上,只有等服务器同意了,才会同步上去。这样可以大量提升网络流畅性和减少额外带宽消耗。

Server

UFUNCTION(Server)

Server RPC的大致原理:
服务器RPC在执行中的过程大概是这样的:如果当前的端是Server(Authority),那么就是直接在自身执行。如果没有Authority,就是Client发送请求到Server上,然后在Server上执行这些函数。

Multicast

UFUNCTION(NetMulticast)

多播实际上没什么好说的了,就是同步到所有连接的端,常用于更新比分等。

游戏引擎中的网络模块实际上是非常复杂的,这篇文章也只是讲了一个RPC的概念,实际上还有Replication RepNotify OwnerShip等等很多内容。虚幻引擎的网络是非常强大的,省去了太多我们需要操心的内容,给背后默默工作的开发人员点赞!此文章是笔者的第一篇博客,有问题还请指出,未来笔者也会更新更多的游戏引擎相关内容。

posted on 2022-10-01 14:49  UYOASOBIComponent  阅读(654)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3