UE4 Run On owing Client解析(RPC测试)
今天看到文档中游戏性指南->远程调用函数->在蓝图中使用远程调用函数的 Run On Owning Client 在所有权的客户端上运行部分,发现把Add Item和Remove Item设置为Not Replicated时,跟示例的效果并没有区别,下面将分析这种情况的原因和其中的原理。
1,首先解释上面这种情况的原因,该示例使用的是第三人称模板,在Character里写了一个String变量Inventory,设置如图:

在场景中放置一个Trigger Box,在关卡蓝图添加BeginOverlap和EndOverlap事件:

AddItem和RemoveItem:打印一个字符串并给Character里的Inventory赋值。


在示例中这两个事件设置为Run On owing Client,游戏运行起来的效果是当服务器的Character进入Trigger时,会调用服务器的Character的AddItem,当切换到客户端的Character进入Trigger时,会调用客户端的Character的AddItem,但是这是依赖Trigger重叠的Actor来分别调用的,跟AddItem这个函数的同步属性没有关系。根据RPC中的图表:

可以看到当在服务器调用RPC时,如果actor的所有权是服务器,那调用的函数是notreplicated、server、client时的结果都是在服务器上执行,示例中是在Triggerbox的Overlap事件调用的AddItem,所以AddItem属于Triggerbox,而Triggerbox的所有权是服务器,AddItem都是在服务器上执行的,所以AddItem函数的这几个选项的结果都是一样的。
下面是关于RPC的一些试验:
1,Level Blueprint存在于服务器和客户端,GameMode存在于服务器(这个都知道-.-)
2,枪开火的函数应该如何实现?

根据文档说明,Run on owing client必须放在以上Actor中执行,否则服务器不知道要给哪个客户端执行,所以一种方法是开火的函数设置为Run On Server,并且把产生的粒子特效设为复制,这样所有客户端都能看到效果.
还有一点需要注意,虚幻采用的是客户端服务器模式,一个客户端是不能直接与任何一个客户端通信的!!!但是可以模拟这个行为,创建两个函数,第一个为Run On Server,第二个为Multicast,第一个函数只负责调用第二个函数,第二个函数为创建开火的粒子特效,这样创建的粒子特效不用复制也能有同样的效果。
UE4 Run On owing Client解析(RPC测试)的更多相关文章
- iOS5系统API和5个开源库的JSON解析速度测试
iOS5系统API和5个开源库的JSON解析速度测试 iOS5新增了JSON解析的API,我们将其和其他五个开源的JSON解析库进行了解析速度的测试,下面是测试的结果和工程代码附件. 我们选择的测试对 ...
- 机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理、源码解析及测试
机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理.源码解析及测试 关键字:决策树.python.源码解析.测试作者:米仓山下时间:2018-10-2 ...
- dotnet core TargetFramework 解析顺序测试
dotnet core TargetFramework 解析顺序测试 Intro 现在 dotnet 的 TargetFramework 越来越多,抛开 .NET Framework 不谈,如果一个类 ...
- alluxio源码解析-rpc调用概述-client和worker之间的block模块的通讯架构(netty版本)(3)
(1.8版本)client和worker之间的block模块的通讯架构 block作为alluxio文件读取或者存储的最小基本单位,都是通过BlockOutStream和BlockInputtream ...
- UE4 Run On Server与Run on owning client
- Axis2创建WebService服务端接口+SoupUI以及Client端demo测试调用
第一步:引入axis2相关jar包,如果是pom项目,直接在pom文件中引入依赖就好 <dependency> <groupId>org.apache.axis2</gr ...
- 通过http.client解析url返回的数据时为什么中文变成了unicode码
今天在解析json数据的时候得到了一堆这样的数据:{"errNum":0,"errMsg":"success","retData& ...
- dubbo、zookeeper心跳相关参数解析与测试
dubbo consumer和provider的心跳机制 dubbo客户端和dubbo服务端之间存在心跳,目的是维持provider和consumer之间的长连接.由dubbo客户端主动发起,可参见d ...
- junit源码解析--捕获测试结果
OK,前面的博客我们整理了junit运行完了所有的测试用例,那么OK了,现在开始该收集测试结果了. 在这最后一步中,junit主要是玩一个类,TestResult.这里类中封装了几个参数,在初始化这个 ...
随机推荐
- poj2594最小顶点覆盖+传递闭包
传递闭包最开始是在Floyd-Warshall算法里面出现的,当时这算法用的很少就被我忽视了.. 传递闭包是指如果i能到达k,并且k能到达j,那么i就能到达j Have you ever read a ...
- linux服务器性能(网卡流量、CPU、内存、磁盘使用率)监控
广义的网站的监控涵盖所有的非业务行为的数据采集与管理,包括数据分析师和产品设计师使用的网站用户行为日志.业务运行数据,以及供运维工程师和开发工程师使用的性能统计数据等. 本文主要是通过shell脚本来 ...
- Linux的环境变量设置和查看
一.Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1.永久的:需要修改配置文件,变量永久生效. 2.临时的:使用export命令声明即可,变量在关闭shell时失效. 二. ...
- 实现ThreadFactory接口生成自定义的线程给Fork/Join框架
Fork/Join框架是Java7中最有趣的特征之一.它是Executor和ExecutorService接口的一个实现,允许你执行Callable和Runnable任务而不用管理这些执行线程.这个执 ...
- docker安装hadoop集群
docker安装hadoop集群?图啥呢?不图啥,就是图好玩.本篇博客主要是来教大家如何搭建一个docker的hadoop集群.不要问 为什么我要做这么无聊的事情,答案你也许知道,因为没有女票.... ...
- MyBatis之ObjectFactory
关于在MyBatis中的ObjectFactory有什么用,在官方文档中有这样的描述(大多数网上的博客都是直接引用这一描述):MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(Obj ...
- Vue中comoputed中的数据绑定
Vue中的数据实现响应式绑定是在初始化的时候利用definePrototype的定义set和get过滤器,在进行组件模板编译时实现water的监听搜集依赖项,当数据发生变化时在set中通过调用dep. ...
- 新鲜小玩意儿- deviceOrientation移动设备旋转事件
<javascript高级程序设计>第三版 其中事件的章节 提到一个有意思的事件 deviceOrientation 也就是 设备(device) - orientation(方向) 贴代 ...
- 如何选择版本控制系统之二---Git的研发应用场
之前写了一篇<如何选择版本控制系统 ---为什么选择Git版本控制系统>,地址是:http://www.cnblogs.com/goldenfish/p/6876864.html,有兴趣的 ...
- Nginx教程(二) Nginx虚拟主机配置
Nginx教程(二) Nginx虚拟主机配置 1 虚拟主机管理 1.1 Nginx管理虚拟主机 虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主 ...