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

笔者近期在进行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. Linux磁盘占满处理

    按一下操作查看大文件在哪里, 清理大文件. 你切换到 / du -sh * 进入占用多的目录,再使用du -sh *找到下一个大目录. 以此类推,删除无用大文件

  2. [vsCode]Visual Studio Code环境变量不同步

    很奇怪的事情,在设置好Path环境变量后,powershell正常了, 但是vscode不正常 解决方法竟然是: 确认{在PowerShell运行正常}后,关闭{vsCode},进入{管理员模式的Po ...

  3. 【Java学习Day05】LDEA的安装和使用

    LDEA安装 进入LDEA所有版本下载地址,建议下载LDEA2018 3.6版本 安装好LDEA后双击打开LDEA点击Nest,选择合适的文件路径,个人不建议放在C盘 选择好合适的文件路径后点击Nex ...

  4. 12-K8S之调度器、预选策略和优选函数

    目录 调度器.预选策略和优选函数 1.nodeSelector nodeName调度: 2.节点亲和性调度(pod亲和于node节点) 3.pod亲和度调度(pod亲和于pod) 4.pod反亲和性度 ...

  5. VMware VirtualCenter Servere服务不能启动

    故障现象现象:VMware VirtualCenter Servere服务不能启动 解决办法:进入%programdata%\VMware\VMwareVirtualCenter\Logs目录下面. ...

  6. x264码率控制

    1. x264 1.1 preset 的参数主要调节编码速度和质量的平衡,有ultrafast.superfast.veryfast.faster.fast.medium.slow.slower.ve ...

  7. 物理机安装mysql8, 修改数据库目录

    自动安装mysql ,并修改数据库目录. #! /bin/bash #mysql官方下载路径:https://dev.mysql.com/downloads/mysql/ # 配置dnf源 mkdir ...

  8. STM32F0使用LL库实现UART接收

    初始化: 1 void MX_USART1_UART_Init(void) 2 { 3 4 /* USER CODE BEGIN USART1_Init 0 */ 5 6 /* USER CODE E ...

  9. 对LVDS的浅显理解

    文章参考百度文库:LVDS标准及介绍 LVDS与VB1的对比:LVDS与VB1详细介绍 1.LVDS简介 LVDS( Low Voltage Differential Signaling)是一种低摆幅 ...

  10. 从COM域名即将涨价看如何控制域名成本问题

    我们很多站长在上周的时候应该陆续有收到各大域名注册商的推送邮件,将会在今年9月1日开始COM域名会涨价,当然涨价的福利也不是很大.标价大约是会到每个每年增加至9.99美元.可能我们有一些网友要说,有些 ...