本篇不介绍如何使用以及具体操作,仅总结以及一些细节问题(具体操作点击这里----在蓝图中同步 Actor)
Actor 粗略的简介
在开始总结之前,我们得先粗略的了解一下Actor,了解一个东西,一件事物,那就得首先弄清楚它是什么。
那么Actor是什么?
Actor是“可以更新的一群组件”----源于官方文档,以及《大象无形》中描述也同样有描述Actor
Actor它能够被挂载组件----《大象无形》
个人理解为
Actor就是一个鱼缸,你可以在里面放很多东西,我们把这些东西就称为组件
- 那么它的主要功能我们就知道了,那就可以用来放一些特殊东西(组件)
- 但是他还有另外一个主要功能就是同步
对Actor的介绍到这里就结束了,深入了解需要靠自己了,下面就是进入主题
Actor 同步
Actor Relication 简述
Actor是网络传输的核心,甚至可以说Actor就是网络同步/传输的基本单位。----源于深入浅出UE4网络
网络同步的种种,如复制属性和函数调用都基于Actor的Replicate。如果 Replicate=false 那么你做的一切都是徒劳的。启用Replicate的方式有两种----蓝图和C++。在这里只说蓝图
同步两大要点
- 必须在服务器端
- Actor的Replicates必须为TRUE
UE4网络同步示意图
示意图
这个这么简陋的图肯定是我自己画的啦哈哈哈哈
简单说明
- 只有服务器向客户端同步,客户端不能向服务器端同步
- 而且客户端之间是不存在链接的
一个简单的同步测试
角色蓝图代码节点
结果
可以看到,在我们按下E键之后,生成的Actor并未同步到全部的窗口,并且连在服务器端生成的也是没有同步
这是为什么?
这是因为我们并没有开启火焰这个Actor的Replicates的属性,所以上面的要点要牢记
开启Replicate
需要在对应的蓝图的类默认值(火焰这个蓝图的类默认值)里勾选
在这里需要注意一个属性----NetLoadOnClient
这个属性会默认在载入地图的时候自动在客户端显示/载入Actor,即使你没有勾选Replicate
所以我们要取消勾选
否则会出现下面的结果(这个不是上面的同步例子,只是为了展示NetLoadOnClient的影响)
按照正确的应该就是NoReplicates是不会显示火焰的,但是因为勾选了NetLoadOnClient所以会默认自动加载 NetLoadOnClient只会影响在场景的Actor,而不会影响动态生成的Actor
继续----一个简单的同步测试----的例子
现在我们开启了同步属性也就是Replicate=true,那么接下来我们在测试一遍
服务器生成
我们在服务器生成一个火焰Actor,可以看到所有窗口都成功同步
客户端生成
我们在客户端生成一个火焰Actor,可以看到只有当前的客户端才会生成火焰,其他窗口并不会同步生产(服务器以及其他客户端并不会同步在其中一个客户端生成的Actor)
总结
- 只有服务器向客户端同步,客户端不能向服务器端同步
- 而且客户端之间是不存在链接的
- 需要生成的Actor或者说需要同步的Actor,必须将Replicate设置为TRUE