gpt4 book ai didi

multiplayer - 是否有必要在 worldUpdate 中包含物理确定性的游戏对象?

转载 作者:行者123 更新时间:2023-12-04 03:14:17 25 4
gpt4 key购买 nike

为了减少数据传输大小和为每个 worldUpdate 序列化世界对象的计算时间,我想知道是否可以省略物理可以完全、忠实地在客户端游戏引擎上模拟的对象的同步(它们不是 playerObjects所以 playerInput 不会直接影响它们,它们的物理特性完全是确定性的)。与这些 GameObjects 的交互将完全由不太频繁的 GameEvents 处理。我觉得如果客户端运行与服务器相同的物理并且可以访问相同的初始条件,这应该是可能的。

当我尝试从后续的 worldUpdates 中省略 GameObjects 时,我发现它们的运动变得更加断断续续,而且它们的移动速度比没有省略时更快;然而,当我在保持客户端打开的情况下停止游戏服务器时,如果我没有省略它们,它们的 Action 更像是我所期望的。这一切都在我的本地机器上进行外推同步。

最佳答案

简短的回答是,最新版本的 Lance(在撰写本文时为 1.0.8)不支持用户从世界更新中省略游戏对象,但它确实实现了一种差异机制,如果对象 netScheme 则从更新中省略对象属性没有改变,节省了带宽。

这意味着如果您有静态物体,例如墙壁,则它们只会为每个玩家传输一次。根本不传输这个是一个有趣的功能。

如果您所指的对象不是静态的,那么就没有真正的方法来确定性地知道它们的位置。您可能已经考虑使用世界步数,但由于网络固有的延迟,不同的客户端在不同的时间处理不同的世界步数。客户端无法知道服务器在给定时间点处理的真正步骤是什么,因此它无法确定性地决定此类对象的位置。这就是 Lance 使用 Authoritative server model 的原因 - 允许单一的事实来源,并确保客户端同步。

如果您仍想手动避免为对象发送更新,您可以编辑其 netScheme 使其不返回任何内容,但其 id,例如:

static get netScheme() {
return {
id: { type: Serializer.TYPES.INT32 }
};
}

尽管由于上述原因这不是典型用途,因此如果您遇到特定的同步问题并且这仍然是您感兴趣的功能,最好在 Lance issue tracker 中提交功能请求。确保包含有关您的用例的详细信息以促进健康的讨论

关于multiplayer - 是否有必要在 worldUpdate 中包含物理确定性的游戏对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44354903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com