试图了解 Unreal Engine 4 复制

Trying to understand Unreal Engine 4 replication

我正在尝试了解如何在客户端和服务器之间调用事件。我现在的目标很简单。我想创建任何可让 2 名玩家互动的东西。

我能想到的最简单的事情是点击时切换颜色的立方体。所以我确实创建了基于演员的蓝图,检查了“复制”和 AlwaysRelevant 以确保。 PlayerController 也被复制,不需要 pawn。

颜色变化蓝图:

如果重要的话,SM 只是静态网格。据我所知,客户端无权调用多播事件,所以我想通过服务器推送它,但它停在那里。从服务器调用按预期工作并且颜色本身被复制到客户端,但是客户端不能自己更改颜色。

我在这个概念中缺少什么?我看了大约 5 个关于复制的视频,我开始认为缺少了一些东西,这对每个人来说都是显而易见的,但我或他们的例子不需要我在这里做的事情。

如您所知,玩家的客户端无法直接调用玩家不 拥有 的 actor 上的服务器 RPC。调用必须通过该玩家的 PlayerController 进行路由。然后玩家的 PlayerController 的服务器副本可以调用服务器拥有的 actors 上的服务器方法。

另一个问题是您似乎出于同一目的同时使用 RPC 和复制属性。我不清楚为什么 changed 被复制,因为你在通常在所有机器上运行的多播事件中修改它。这是很难找到竞争条件错误的秘诀。

虚幻中的复制绝对是最难掌握的概念之一。对我帮助最大的资源是 this guide,它虽然过时,但既全面又切题。

你不能在 PlayerController 中拥有它,它必须在 Pawn 中,如果不是,则在 PlayerState 中,否则它不会共享给其他客户端。