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

笔者近期在进行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等等很多内容。虚幻引擎的网络是非常强大的,省去了太多我们需要操心的内容,给背后默默工作的开发人员点赞!此文章是笔者的第一篇博客,有问题还请指出,未来笔者也会更新更多的游戏引擎相关内容。

UE4 联网RPC部分的更多相关文章

  1. UE4联网游戏中让不同的客户端生成不同的Pawn类型

    效果描述 一个服务器,两个客户端,让他们连接后分别生成不同的Pawn,并且在不同的位置生成. 意义 这是个项目需求,但是我发现如果能够彻底理解并制作出这个功能,会对虚幻4内置的网络功能以及一些重要的G ...

  2. UE4联网测试的快捷方法

    工程中测试 创建bat文件,格式如下: UE4Editor.exe路径 工程文件名 [地图名及参数] -game [其他自定义参数] UE4Editor.exe路径表示虚幻编辑器相应版本的UE4Edi ...

  3. UE4的联网系统研究

    1. 物体复制 具体细节可参考官网内容:http://api.unrealengine.com/CHN/Gameplay/Networking/index.html 这里只挑部分点来展开. 首先,分为 ...

  4. UE4 Run On owing Client解析(RPC测试)

    今天看到文档中游戏性指南->远程调用函数->在蓝图中使用远程调用函数的 Run On Owning Client 在所有权的客户端上运行部分,发现把Add Item和Remove Item ...

  5. [UE4]RPC,远程调用

    RPC 一.Remote Procedure Call:远程程序调用 二.一个进程调用另外一个进程上的函数 由于“Server-shoot”方法被标记为“在服务器上运行”,所以尽管是在第二个窗口(客户 ...

  6. 【UE4】二十三、UE4笔试面试题

    在CSDN博客看到的,带着这些问题,多多留意,正所谓带着问题学习. 一. 1.Actor的EndPlay事件在哪些时候会调用? 2.BlueprintImplementableEvent和Bluepr ...

  7. win10环境下ue4使用游戏手柄输入

    忙里偷闲,趁着源码编译需要好久的时间,把这篇博客补上,来说说怎么在win10环境中,ue4使用游戏手柄输入,也就是gamepad输入. 1.我用的手柄是rapoo v10 这款手柄,连接无线USB之后 ...

  8. RPC、SQL、NFS属于OSI的哪一层

    第一层:物理层 第二层:数据链路层 802.2.802.3ATM.HDLC.FRAME RELAY 第三层:网络层 IP.IPX.ARP.APPLETALK.ICMP 第四层:传输层 TCP.UDP. ...

  9. UE4联机多人游戏基本设置

    UE4自带网络联机功能,但是似乎只有蓝图接口,而真正写功能的时候不能用C++,让人感觉相当诡异 还是作一个简单记录 1.建一个第三人称模板,为什么会用他呢,因为它自带模板的很多组件,直接支持联机功能, ...

  10. UE4游戏开发基础命令

    在个人的Unrealengine账户中关联自己的GitHub账户成功之后,就可以访问UE4引擎的源码了. git clone -b release https://github.com/EpicGam ...

随机推荐

  1. 对 Flutter 的一些看法

    Flutter 发布的时候可谓很轰动,相对于 RN 或 PhoneGap 们,它给出了另外一种跨平台方案,更像是 APP 版的 Unity,而且使用现代的声明式 UI,据说能媲美原生性能.很吸引人,所 ...

  2. IDEA中常见问题

    idea中不存在.iml文件项目主目录下执行命令行mvn idea:module

  3. 本地开发环境使用redis

    1.使用cmd 连接后,查询结果出现乱码时, 尝试连接时加--raw 参数 2.如果还是乱码,设置cmd 窗口编码 chcp 65001 就是换成UTF-8代码页chcp 936 可以换回默认的GBK ...

  4. 在虚拟机安装用友u8的时候出现的一些问题

    几个星期前装的了,小问题不记得,但是有个问题还是记一下 在win10,sql sever2008,u8都装完后,想登录账号,但总是找不到数据源,初始化也失败(密码也不记得自己设过没),也就是登陆时会有 ...

  5. Win11右键默认显示更多选项的设置

    怎么让Win11右键默认显示更多选项?有很多朋友不喜欢win11系统的右键菜单显示,经常需要多点一次"显示更多选项"才能看到想要的内容,大家想知道如何让win11右键菜单默认显示更 ...

  6. python正则表达式提取数据

    re模块, 常用写法 import re def abs_string(): s_string = ' @pytest.mark.Level1@pytest.mark.SmartSharedListd ...

  7. 正则表达式re.compile()的使用

    re 模块提供了不少有用的函数,用以匹配字符串,比如: compile 函数match 函数search 函数findall 函数finditer 函数split 函数sub 函数subn 函数re ...

  8. kafka监控系统kafka eagle安装和使用

    一.kafka eagle介绍 kafka eagle 是一款由国内公司开源的Kafka集群监控系统,可以用来监视kafka集群的broker状态.Topic信息.IO.内存.consumer线程.偏 ...

  9. git 忽略文件与如何忽略已经提交的文件或文件夹

    git 忽略文件与如何忽略已经提交的文件或文件夹   使用 git提交代码的时候可能会遇到想要忽略的文件夹出现在提交列表中的情况 1,目录中右键选择git bash Here 然后输入touch .g ...

  10. Tensorflow框架实现中的“三”种图

    https://zhuanlan.zhihu.com/p/31308381 图(graph)是 tensorflow 用于表达计算任务的一个核心概念.从前端(python)描述神经网络的结构,到后端在 ...