常用的网络模型是服务器-客户端模型, 所有重要的游戏状态都必须在服务器上决定,由服务器将结果复制给每个客户端。对此虚幻引擎提供了两个工具。
1.对于一个事件,它有3种复制属性
-
在服务器上运行 (Server-only): “只有服务器能执行”
-
行为: 只有服务器会执行这个函数里的逻辑。客户端完全不知道这个函数被调用了。但具有复制属性的变量会通过服务器同步到客户端去(看2.1.复制变量),用于同步修改变量,生成对象(变量,对象都具有复制属性可选)。
-
-
多播 (Multicast): “服务器命令所有人执行!”
-
行为: 服务器执行函数后,会命令所有客户端(包括服务器自己) 都执行这个函数里的逻辑。用于同步表现,(音效和动画蒙太奇资源没有复制属性可选(蓝图类有),所以用Server-only不会执行。)
-
-
在拥有的客户端上运行(Run on owning Client):“服务器命令你,只有你能执行”
-
行为:只在网络对象的“拥有者”客户端上执行,而不会在其他客户端或服务器上执行。
-
| 情况 | 是否会同步? | 原因 |
|---|---|---|
| 1. 服务器创建了一个可复制对象 | 是 | 服务器是权威来源,其创建的可复制对象会同步到所有客户端。 |
| 2. 客户端创建了一个可复制对象 | 否 | 客户端没有权限创建需要在网络间同步的对象。该对象仅存在于创建它的客户端本地。 |
| 3. 服务器通过多播函数创建了一个对象 | 是(但需理解方式) | 对象并非被“直接复制”,而是所有客户端各自在本地执行生成命令,达到“同步”效果。 |
只有变量拥有复制属性,复制事件才能让服务器的修改,才能同步到客户端
2.对于一个变量,它有2种复制属性
-
复制 (Replicated) 变量: “我有个消息要通知所有人”
-
行为: 当服务器上一个变量的值改变时(被修改且与之前不同时),它会自动将这个新值同步给所有相关的客户端。通常可以搭配 “RepNotify”,让变量在客户端接收到新值时自动触发一个函数。
-
复制变量最好不要用在动画蓝图里,最好在角色蓝图里复制,动画蓝图获取角色的变量
-
-
复制通知 (RepNotify)
- 当客户端从服务器接收到这个变量的新值时,除了变量本身会自动更新外,还会自动调用专门的回调函数。如果有些事件,不好复制过来,可以用这种办法,修改一个变量,让回调函数去完成。
其余
net.AllowPieseamlessTravel 是一个控制台命令(Console Command)/ 配置变量(CVar),它专门用于 在 PIE(Play In Editor)模式下启用或禁用无缝旅行(Seamless Travel)的网络支持,PIE 模式中是被禁用的。(OpenLevel会导致所有网络连接中断重置)
-
net.AllowPIESeamlessTravel 1(启用) -
net.AllowPIESeamlessTravel 0(禁用)
实操注意事项
0.多个玩家窗口AddMappingContext总报错:在其前面添加判断是否是本地控制器

1.想让玩家看不到自己的模型:角色骨骼别勾选Owner No See

2.想让别人看见自己的模型:角色骨骼别勾选Only Owner See

3.会移动的生成物(如榴弹)除了勾选复制,还要勾选复制运动

4.场景中的可移动物体要勾选Static Mesh Replicate Movement

971

被折叠的 条评论
为什么被折叠?



