在各种多人游戏中,技术设计师必须考虑服务器,网络和客户端上的数据负载,这一点很重要。 为了避免在每个服务器和客户端之间复制所有数据,设计人员为每个服务器建立了感兴趣的区域,并建立了兴趣管理系统。 使用SpatialOS,可以有多个服务器管理模拟的不同元素,因此有效的兴趣管理至关重要。
但是,对于早期版本的SpatialOS,控制每个客户端看到的内容(流向它的数据)的灵活性很小。 每个客户都对SpatialOS世界中与覆盖在该世界上的正方形网格紧密相关的区域感兴趣。 一切都以该网格上的平方来衡量-我们称之为“块”。 这个兴趣区是固定的。 对于世界上所有参与者,兴趣区域都是相同的。
有了新的运行时,所有这些都改变了。 现在,我们为每个工作人员支持各种兴趣类型,我们称之为基于查询的兴趣(QBI)。 这使开发人员可以指定世界上与客户当前需求相关的实体或组件的子集,该子集是通过与位置的接近程度或通过查询来选择的。 例如,开发人员可以指定在客户端的迷你地图上仅显示具有健康组件并且在玩家50英尺内的实体。
不过,我们应该明确指出,新运行时的初始版本不会立即拥有所有这些兴趣管理元素-我们将随着时间的流逝解锁它们。
让我们来看一个更长的设计示例,以便您可以看到发生了什么变化以及即将在一天之内解锁的内容。
设计实例

因此,玩家的角色处于多人游戏世界中。 目前,他们正在努力在游戏桌面上玩一个小物理难题。 他们的朋友也在游戏中,正在隔壁房间里制作物品。 在此示例中,世界上所有对象都是由实体组成的,实体本身由描述其不同特征的组件组成。 这些变化频繁,并且玩家的兴趣仅在于其周围环境。
通过针对此本地环境在较短的区域中设置高保真度,我们可以做到这一点,以便可以从服务器上足够频繁地更新每个玩家的仿真,以维持仿真,而不会导致运行时超载。

遥远而广阔。
现在,假设玩家完成拼图游戏,然后走到阳台上。 我们发现它们在高耸的塔顶,俯瞰着某些林地。
在这里,他们的客户端仅需要低保真度更新即可看到但不与之交互的对象。 开发人员可以设置更远的环境,以对大量的实体组件进行较低的保真度更新-因此应可见的所有内容都是,但是其规范位置和相关状态(健康状况)的更新频率较低。
您还可以用此做其他有趣的事情。 例如,当玩家装备武器时,可以将其设置为触发玩家客户端开始接收有关附近生物的健康状况的更新。 甚至可以是动态更改,在游戏直播时添加到运行时中-只有SpatialOS允许这样做。

遥远但相关。
现在,我们的播放器结束了对风景的欣赏,并在塔的顶部走来走去,发现它是一座灯塔,可以俯瞰大海。 他们走到固定在栏杆上的望远镜,扫描遥远的海洋,看着船,美人鱼,岛屿和海鸥。 一艘船上的水手发现了小望远镜的闪光,并向灯塔挥手致意。 玩家看到它们并向后挥手。
使用我们以前的运行时,如果没有非常巧妙的设计,该示例将非常耗费资源并且不可能—玩家需要对每个块都感兴趣,不仅在他们的视线方向,而且还要对一个均匀分布在自己周围的大立方体。
借助基于查询的兴趣,开发人员不仅可以让玩家看到远处的物体,还可以使它们互动,从而使远方水手的兴趣也延伸到闪闪发光的望远镜上。
在更激烈的游戏中,可以想象开发人员使用QBI这样在远距离上构建狙击步枪或射箭功能,或者玩家需要在远处进行高保真度更新而又不需要中间空间进行任何更新的情况。
理想情况下,这将作为扩展的长方体完成,因此可以通过插入物体来阻止玩家的视线,但在这种情况下(玩家足够高,物体无法干预的情况),远处的圆圈也可以完成此任务。

普遍相关性。
现在,我们的玩家将视线移到了地平线,并感到惊讶。 遥远的天空变亮,因为一个很小的,非常遥远的岛屿喷发成火山,并开始向空中投掷岩石和浮石。 当烟雾和灰烬充满天空时,它变得又黑又冷。
像这样的对象与模拟中的每个人都息息相关–在传统游戏中,开发人员必须找到某种方法来解决或伪造此问题。 在这里,客户的兴趣将由很大的半径,非常低的保真度查询定义。 它也可以用于山脉之类的物体(挡住视线和火线),大型可见事件(如雷暴或核打击),或者仅用于关键数据(如控制点的位置)。

非空间数据查询
当岩石开始从天而降时,玩家感到恐惧,然后回到灯塔警告他们的朋友-但是他们离开了房间,并且没有回应游戏中的消息。 他们注销了吗? 玩家进入行会菜单,查看朋友的数据-他们在线并且仍在他们的同一个区域。
在这里,行会被视为未链接到任何位置的特殊QBI数据查询。 这里的游戏逻辑在一组实体上具有中等保真度更新,这些实体可以在游戏世界中的任何地方,由游戏逻辑和针对特定组件组(等级,级别,位置以及它们是否在线,说。 它还可能会列出有关世界的元数据,例如行会的财富,玩家等级和排行榜。
玩家拉起他们的迷你地图以找到它们。 为了节省带宽,迷你地图仅从每个播放器和NPC实体上的一小部分组件中获取更新(例如派系和位置),位于播放器周围的中等半径内,但定期更新。
这告诉玩家他们的朋友在塔的底部一动不动。 他们将他们添加到团队中,以查看其健康状况。 像公会一样,游戏逻辑将团队定义为在一小组实体上有限地选择快速变化的组件,但是更新得更快。
玩家很快发现自己的朋友受伤并且失去知觉,这意味着他们的游戏中通信已被设计禁用。 他们的健康状况正在迅速下降。

隐形和反作弊
玩家冲上楼去医治他们的朋友。 当他们到达那里时,他们看到了问题。 逃离火山的敌方玩家进入该地区,袭击了他们的朋友并将他们击倒,仍然站在他们的上方。 玩家进入隐身模式以接近他们的朋友。
现在,对于敌方玩家,原来的玩家已经被排除在兴趣之外–他们在隐身时不会在客户端高保真本地游戏逻辑中发挥作用。 这是为了防止其他玩家通过黑客攻击其客户端而作弊-客户端没有信息且无法请求信息,因此对它进行黑客攻击是没有用的。

在区域之间移动
在隐身的同时,玩家悄悄施放了城镇传送门咒语,以使受伤的朋友回到安全的地方。 召唤门户之后,他们会窥视其中,并发现那里的实体都是被动的和友好的。
在这里,我们有类似望远镜示例的内容,但是玩家对世界上任何地方的一小块区域都感兴趣。 召唤时间允许玩家客户端为新区域预加载实体,组件和本地资产。 当他们浏览门户时,播放器会收到有关该地区实体的中等保真度更新,从而使他们以最小的方式进行交互。 开发人员可以双向或单向地通过此门户进行构想,或者限制相关的组件,以进一步减少负载。
玩家在关闭门户之前将受伤的朋友拉过门户。 现在,他们可以和平地医治他们。
QBI与未来
重申一下,这就是我们使用QBI技术的方向-其中一些设计现在可能实现,而其他一些则将来可能实现。
如果您想立即开始实验,可以立即注册SpatialOS。 我们即将发布QBI系统的Alpha版本。
立即注册。