兴趣管理
description: 我们新的全局兴趣管理系统的文档。
兴趣管理(Interest Management)
兴趣管理(Interest Management)
在制作多人游戏时,最明显的方法是简单地向每个玩家广播世界状态。默认情况下,当您不使用任何兴趣管理组件时,Mirror就是这样做的。

与其向每个玩家发送完整的世界状态,不如考虑只向玩家发送周围的内容。兴趣管理有几个主要原因:
规模:想象一下《魔兽世界》。向每个玩家发送整个世界将是疯狂的。为了扩展到成千上万的连接,我们需要只发送与任何给定玩家相关的内容。
可见性:在类似《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)。这很容易理解。
最后更新于
这有帮助吗?