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

UE4 联网RPC部分的更多相关文章
- UE4联网游戏中让不同的客户端生成不同的Pawn类型
效果描述 一个服务器,两个客户端,让他们连接后分别生成不同的Pawn,并且在不同的位置生成. 意义 这是个项目需求,但是我发现如果能够彻底理解并制作出这个功能,会对虚幻4内置的网络功能以及一些重要的G ...
- UE4联网测试的快捷方法
工程中测试 创建bat文件,格式如下: UE4Editor.exe路径 工程文件名 [地图名及参数] -game [其他自定义参数] UE4Editor.exe路径表示虚幻编辑器相应版本的UE4Edi ...
- UE4的联网系统研究
1. 物体复制 具体细节可参考官网内容:http://api.unrealengine.com/CHN/Gameplay/Networking/index.html 这里只挑部分点来展开. 首先,分为 ...
- UE4 Run On owing Client解析(RPC测试)
今天看到文档中游戏性指南->远程调用函数->在蓝图中使用远程调用函数的 Run On Owning Client 在所有权的客户端上运行部分,发现把Add Item和Remove Item ...
- [UE4]RPC,远程调用
RPC 一.Remote Procedure Call:远程程序调用 二.一个进程调用另外一个进程上的函数 由于“Server-shoot”方法被标记为“在服务器上运行”,所以尽管是在第二个窗口(客户 ...
- 【UE4】二十三、UE4笔试面试题
在CSDN博客看到的,带着这些问题,多多留意,正所谓带着问题学习. 一. 1.Actor的EndPlay事件在哪些时候会调用? 2.BlueprintImplementableEvent和Bluepr ...
- win10环境下ue4使用游戏手柄输入
忙里偷闲,趁着源码编译需要好久的时间,把这篇博客补上,来说说怎么在win10环境中,ue4使用游戏手柄输入,也就是gamepad输入. 1.我用的手柄是rapoo v10 这款手柄,连接无线USB之后 ...
- RPC、SQL、NFS属于OSI的哪一层
第一层:物理层 第二层:数据链路层 802.2.802.3ATM.HDLC.FRAME RELAY 第三层:网络层 IP.IPX.ARP.APPLETALK.ICMP 第四层:传输层 TCP.UDP. ...
- UE4联机多人游戏基本设置
UE4自带网络联机功能,但是似乎只有蓝图接口,而真正写功能的时候不能用C++,让人感觉相当诡异 还是作一个简单记录 1.建一个第三人称模板,为什么会用他呢,因为它自带模板的很多组件,直接支持联机功能, ...
- UE4游戏开发基础命令
在个人的Unrealengine账户中关联自己的GitHub账户成功之后,就可以访问UE4引擎的源码了. git clone -b release https://github.com/EpicGam ...
随机推荐
- 批量检测URL中的关键词,并且将不含有关键词的URL输出到txt文件当中
编写代码时遇到的问题 写入txt(一开始忘记了tuple类型需要转换为str) 处理逻辑(一开始并没有将 body与url绑定到一起,所以或返回所有的url) 关闭太早(这点是有点疑惑的,难道不用关闭 ...
- 山寨e网通公告
SHANZGONGG山寨e网通V1.0[换行]软件完全免费,官方绝不会索取任何费用,请勿被骗,后果自负.[换行]如果你有什么更好的建议或者需要哪里改进的地方,请联系作者QQ206044600反馈,前提 ...
- gson属性disableHtmlEscaping对等于号的转义\u003d,注解符号Expose,SerializedName,Since和Until
gson属性disableHtmlEscaping对等于号的转义\u003d,注解符号Expose,SerializedName,Since和Until package com.example.cor ...
- ts(typescript)讲解for , for...in..., for...of..., while, every, some, map, filter
for 一般用于已知循环次数 var num:number = 5; var i:number; var factorial = 1; for(i = num;i>=1;i--) { fact ...
- OC基础 - iOS在枚举赋值时为何采用左移格式
枚举值 1 - iOS 枚举成员在赋值时往往是如下模式:左移对齐 2 - 为何这般设计 ?其一提高了阅读性:其二便于计算,能够更好的表达枚举值的含义 1 #import "ViewContr ...
- strace 跟踪特定系统调用
/usrdsk/strace -tt -e trace=write -p 664 /usrdsk/strace -tt -e trace=%memory -p 664
- clickhouse 重启,软连接失效,增加存储路径
1. 启动停止命令 systemctl start clickhouse-server systemctl stop clickhouse-server systemctl status clickh ...
- Supervisor安装及配置
Supervisor安装 # 安装 easy_install supervisor # 生成默认配置文件 echo_supervisord_conf > /etc/supervisord.con ...
- Linux 网卡(遇见问题的解决)
主配置文件 /etc/sysconfig/network-scripts/ifcfg-eth1 里面的详细内容 DEVICE=eth1 网卡名称 TYPE=Ethernet 类型,Ethernet|B ...
- SAP 自建事务码
自建事务码的 事务码 se93 一般来说开发人员会遇到,开发了报表已经一些功能,不会让业务人员通过se38来进行使用,一般会新建一个事务码让业务人员在t-code中的使用 配置对应的程序即可