如何使客户端控制一个在不在服务器上且无需同步的actor

289 浏览网络联机客户端控制
0

在一般情况下,客户端控制的物体都是服务器生成或在服务器actor列表中的,因此可以在服务器上通过引用和客户端的Player Controller进行控制。

但是如果此类actor在每一个客户端生成且相异,服务器亦存在一个唯一的此类actor,那么如何使客户端控制这个在不在服务器上且无需同步的actor?

由于在多人模式中,客户端无法不通过服务器自由切换Play Controller的控制对象。但是,仅通过蓝图的自定义事件(On Server)无法传递不存在于服务器上的actor,即在复制到服务器的事件中actor object cite参数为none,因为其不具有FNetworkGUID,在调用时会被服务器丢弃。

在虚幻引擎文档 “复制对象引用” 中我发现了两点可能可以用来实现此功能的叙述,以及一点负面叙述:

1、任何未复制的 actor 都必须有可靠命名

2、满足以下条件的/组件/即拥有可靠命名:采用手动标记(通过 UActorComponent::SetNetAddressable 进行)

3、拥有可靠命名的对象指的是存在于服务器和客户端上的同名对象。如果 Actor 是从数据包直接加载(并非在游戏期间生成),它们就被认为是拥有可靠命名。

那么,有一些可能的解决方案:

1、通过在服务器上创建一个专门用于复制对象引用的有可靠命名的actor,然后通过某种方式手动标记(我没有找到对应的函数),从而复制对象引用使客户端完成控制

2、(不知道,我不会了)

非常感谢您能够看完我的叙述,也感谢您为帮助我解决问题的努力

问的问题
  • 活跃
  • 查看289 次
  • 答案0 回答
已解决44 浏览网络联机Client Possess Multiplayer
0

在Server端以下代码可以正常运行并控制,但在Client端RTS_Controller(Pawn)可以正常生成但是控制失败。

此处RTS_Controller应该是一个在所有客户端本地运行的Pawn,没有网络复制的必要

已知:

Server采用监听服务器配置,在PIE模式运行

Server和Client都能正常spawn且运行生成对象的构造函数和Event Begin

问题关闭,等待新的答案
选择最佳答案
  • 活跃
  • 查看289 次
  • 答案0 回答