兴趣管理


description: 我们新的全局兴趣管理系统的文档。

兴趣管理(Interest Management)

兴趣管理(Interest Management)

在制作多人游戏时,最明显的方法是简单地向每个玩家广播世界状态。默认情况下,当您不使用任何兴趣管理组件时,Mirror就是这样做的。

来源: https://www.dynetisgames.com/2017/04/05/interest-management-mog/

与其向每个玩家发送完整的世界状态,不如考虑只向玩家发送周围的内容。兴趣管理有几个主要原因:

  • 规模:想象一下《魔兽世界》。向每个玩家发送整个世界将是疯狂的。为了扩展到成千上万的连接,我们需要只发送与任何给定玩家相关的内容。

  • 可见性:在类似《DotA/英雄联盟》的MOBA游戏中,并非每个人都应该始终看到其他人。玩家应该只看到自己的团队和周围的怪物。此外,玩家不应该看到墙后面等等。

  • 作弊:在《反恐精英》等游戏中,玩家自然不会看到墙后面的敌人,因为摄像机不会渲染它们。但是,如果整个世界状态在内存中已知,那么黑客可能会利用这一点,无论如何都会显示墙后面的玩家。

换句话说,兴趣管理几乎总是一个好主意。

内置系统

选择Network Manager并添加一个内置的兴趣管理组件。

  • Spatial Hashing是我们从传统的每个网络标识系统转移到全局系统的原因,并使用一个全局的**可见范围(Vis Range)**设置,该设置对场景中的所有内容都是相同的。

  • Distance是对Network Proximity Checker的平等替代品。

  • Scene允许在附加场景之间进行视觉和物理隔离。

  • Match为非物理卡牌、棋盘、街机游戏中的玩家进行隔离。

  • Team提供将网络对象的可见性限制为团队成员的功能。这也可用于仅所有者可见的物品,替代Network Owner Checker

  • Custom兴趣管理提供了一个模板,您可以使用它来创建自己的系统。

  • Legacy兴趣管理 - 已弃用。

结语 (Final Remarks)

新的兴趣管理 API 相当简单,并且允许进行大量的自定义。我们通过基于距离的示例进行了演示,这很容易理解。

你可能已经注意到这是一个全局组件,但所有功能似乎都是围绕一个网络标识(Network Identity)在本地工作的。这有两个原因:

  • 我们的传统兴趣管理系统是基于每个网络标识的基础(或者可以说是本地的)。对于全局系统,我们只是将这些功能移动到一个全局组件中。

    • 这样可以实现全局解决方案,比如空间哈希(Spatial hashing),同时也保证了功能的一致性和从旧系统轻松升级。

    • 实际上只是将旧系统移动到了不同的位置。不要害怕它 :)

  • 兴趣管理可能会变得相当复杂,涉及到在正确时间进行生成和销毁。Mirror 在**NetworkServer**中有大量的兴趣管理代码,它只是简单地调用上述三个函数。

    • 这个想法是为你屏蔽所有复杂性。你只需要关注一个网络标识(Network Identity)。这很容易理解。

最后更新于

这有帮助吗?