我需要准确、响应迅速且无延迟的NPC(非人角色)系统,因为我正在开发一款类似灵魂系列的合作游戏。

目前的问题在于客户端和服务器端的位置不一致。这很明显,之前如果我使用服务器端的碰撞检测来处理NPC,我就不会遇到这个问题。但是,由于延迟问题,这不是一个可行的解决方案,因为它总是会导致延迟。

我已经尝试了所有方法。包括在服务器端对NPC的位置进行预测,向客户端发送客户端侧的距离差值。但是,我仍然无法获得准确和快速的结果!

所以,现在我唯一的选择就是客户端所有的确定性NPC。为了在服务器和客户端之间达成逻辑的共识,我使用一个随机生成的种子作为开始会话时的种子。这一个种子可以用来确定NPC应该做什么样的攻击。客户端获得“拥有的权利”来控制NPC。这个权利会在NPC决定攻击客户端时转移给另一个客户端。

由于它们是确定性的,我们可以简单地告诉所有客户端移动到最新的NPC更新中指定的目标位置。这可以是一个位置(用于巡逻),或更有可能的是一个客户端要追踪的目标。

通过拥有权利,客户端可以确定NPC应该做什么样的攻击。为了防止非常糟糕的欺骗行为,我们将根据条件生成攻击列表(例如,如果客户端太远了,我们将生成“长矛冲锋”和“长矛投掷”)。

我们使用种子来选择攻击,并将其发送到服务器进行复制。攻击本身首先在客户端上进行,服务器端验证条件,接受表格,然后使用相同的种子来选择攻击(它将是同步的,可能通过历史缓冲区进行)。然后,服务器端将攻击复制到其他所有客户端。

显然,有一些权衡和妥协。欺骗者、不一致和其他问题。欺骗者不是一个优先问题(目前),因为你只应该和你信任的朋友一起玩游戏。不一致将通过在转移NPC所有权时同步位置来解决,可能通过线性插值(lerping)。但不一致可能根本不存在,或者不至于存在到一个显著的水平。

你对这个系统有什么想法?