虚幻RPC

常用的网络模型是服务器-客户端模型, 所有重要的游戏状态都必须在服务器上决定,由服务器将结果复制给每个客户端。对此虚幻引擎提供了两个工具。

1.对于一个事件,它有3种复制属性

  1. 在服务器上运行 (Server-only): “只有服务器能执行”

    • 行为: 只有服务器会执行这个函数里的逻辑。客户端完全不知道这个函数被调用了。但具有复制属性的变量会通过服务器同步到客户端去(看2.1.复制变量),用于同步修改变量,生成对象(变量,对象都具有复制属性可选)。

  2. 多播 (Multicast): “服务器命令所有人执行!”

    • 行为: 服务器执行函数后,会命令所有客户端(包括服务器自己) 都执行这个函数里的逻辑。用于同步表现,(音效和动画蒙太奇资源没有复制属性可选(蓝图类有),所以用Server-only不会执行。)

  3. 在拥有的客户端上运行(Run on owning Client):“服务器命令你,只有你能执行”

    • 行为只在网络对象的“拥有者”客户端上执行,而不会在其他客户端或服务器上执行。

情况是否会同步?原因
1. 服务器创建了一个可复制对象服务器是权威来源,其创建的可复制对象会同步到所有客户端。
2. 客户端创建了一个可复制对象客户端没有权限创建需要在网络间同步的对象。该对象仅存在于创建它的客户端本地。
3. 服务器通过多播函数创建了一个对象(但需理解方式)对象并非被“直接复制”,而是所有客户端各自在本地执行生成命令,达到“同步”效果。

只有变量拥有复制属性,复制事件才能让服务器的修改,才能同步到客户端

2.对于一个变量,它有2种复制属性

  1. 复制 (Replicated) 变量: “我有个消息要通知所有人”

    • 行为: 当服务器上一个变量的值改变时(被修改且与之前不同时),它会自动将这个新值同步给所有相关的客户端。通常可以搭配 “RepNotify”,让变量在客户端接收到新值时自动触发一个函数。

    • 复制变量最好不要用在动画蓝图里,最好在角色蓝图里复制,动画蓝图获取角色的变量

  2. 复制通知 (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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值